PDO查询不显示结果?

时间:2015-04-28 03:42:01

标签: php pdo

好的,所以我是PDO语句的新手,所以我不确定我是否做了语法错误或诸如此类的错误。 php文件没有显示任何错误:

<?php
    include('db_config.php');
    $itemName = 'Item1';

    $sql = "SELECT * FROM order WHERE itemName = $itemName;"; 
    $stmt = $conn->prepare($sql);
    $stmt->execute();
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
    {        
        echo $row['itemName'];
    }
?>

我的目标是使用bootstraps datepicker来提取项目,但为了进行此测试,我使用的是itemName。 php文件出现空白?

我检查了字段名称db_config,并且不确定问题的来源。

如果我的陈述中出现错误或任何看似错误的错误,请告诉我。

3 个答案:

答案 0 :(得分:4)

首先,您使用MySQL reserved wordorder,需要特别注意;主要是用它周围的蜱虫。

然后,由于我们正在处理字符串,$itemName需要用引号括起来。

<?php
    include('db_config.php');
    $itemName = 'Item1';

    $sql = "SELECT * FROM `order` WHERE itemName = '$itemName';"; 
    $stmt = $conn->prepare($sql);
    $stmt->execute();
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
    {        
        echo $row['itemName'];
    }
?>
  • 使用表名周围的刻度,或将其重命名为&#34; orders&#34;,它不是保留的关键字。
  

&#34; php文件没有显示任何错误:&#34;

那是因为你没有检查它们。

在打开连接后立即添加$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

根据您在问题中留下的包含MySQL错误的评论:

  

1064您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在&#39; order

附近使用正确的语法
  • 读取它near 'order它从&#34; order&#34;。
  • 开始

现在,如果您的查询应该包含MySQL会抱怨的任何字符,例如引用等,那么您将需要转义查询并使用预准备语句。

例如,如果使用:

$itemName = "Timmy's Sour Dough";

会转换为

WHERE itemName = 'Timmy's Sour Dough' 

反过来抛出语法错误。

因此,最好立即立即逃避任何数据。

修改

您对preparenew to PDO的使用共同表明您已经尝试使用准备好的语句,而不是正确的方法。你只需要准备好一份声明就可以了。代码中的一种正确方法是

  $sql = "SELECT * FROM `order` WHERE itemName = ? "; 
  $stmt = $conn->prepare($sql);
  $stmt->execute(array($itemName));

请注意我们在您的查询中如何?,然后我们会在execute来电中为其发送值。你去了:))

答案 1 :(得分:1)

您完全无视人们使用PDO的主要原因。准备好的语句是你应该使用的,这将使你的查询看起来像这样:

$itemName = 'Item1';

$sql = "SELECT * FROM order WHERE itemName = ?"; 
$stmt = $conn->prepare($sql);
$stmt->bindParam(1, $item, PDO::PARAM_STR);
$stmt->execute();

阅读bindParam()

将来,请使用以下命令在脚本开头打开错误报告:

ini_set('display_errors', 1);
error_reporting(E_ALL);

这会为你节省很多时间。

答案 2 :(得分:0)

看起来你的sql语句中有错误。由于itemName是数据库中的varchar或文本,因此需要在查询中将其放在单引号中:

$sql = "SELECT * FROM order WHERE itemName = '$itemName';";