PDO 查询不显示结果?

PDO query not displaying results?

好吧,我是 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'];
    }
?>

我的 objective 是使用 bootstraps datepicker 拉取一个项目,但出于此测试的目的,我使用的是 itemName。 php 文件出现空白?

我已经检查了字段名称,db_config,但不确定问题出在哪里。

如果我的陈述有误或任何看似错误的地方,请告诉我。

您完全忽略了人们使用 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);

那会为你节省很多时间。

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

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

首先,您使用的是MySQL reserved word,是order,需要特别注意;主要是用它周围的刻度。

然后因为我们正在处理一个字符串,所以 $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'];
    }
?>
  • 要么在您的 table 名称周围打勾,要么将其重命名为 "orders",它不是保留关键字。

"The php file does not show any errors:"

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

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



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

1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order

  • 阅读 near 'order 它从 "order" 开始。

现在,如果您的查询应该包含 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 调用中为其发送一个值。给你:)