Php PDO查询不显示结果?

Php PDO查询不显示结果?,php,pdo,Php,Pdo,好的,我是PDO语句的新手,所以我不确定我是否犯了语法错误或诸如此类的错误。php文件未显示任何错误: <?php include('db_config.php'); $itemName = 'Item1'; $sql = "SELECT * FROM order WHERE itemName = $itemName;"; $stmt = $conn->prepare($sql); $stmt->execute(); whil

好的,我是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,不确定问题来自何处


请让我知道我的陈述中是否有错误或任何看似错误的地方。

你完全忽略了人们使用PDO的主要原因。准备好的语句是您应该使用的语句,这将使您的查询如下所示:

$itemName = 'Item1';

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


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

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

这将为您节省大量时间。

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

$sql = "SELECT * FROM order WHERE itemName = '$itemName';"; 
首先,您使用的是一个,being
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'];
    }
?>
会转化为

WHERE itemName = 'Timmy's Sour Dough' 
反过来抛出一个语法错误

因此,最好立即转义任何数据

编辑

您使用的
prepare
PDO新增的
共同表明您已经在尝试使用prepared语句,只是方式不正确。你离一份准备充分的声明还有一点距离。代码中的一种正确方法是

  $sql = "SELECT * FROM `order` WHERE itemName = ? "; 
  $stmt = $conn->prepare($sql);
  $stmt->execute(array($itemName));
请注意,我们在您的查询中有一个
,然后我们在您的
execute
调用中为它发送一个值。好了:)

  • 我会处理好的

在查询中用单引号将您的
$itemName
包装起来,或者更好地使用准备好的语句。“php文件没有显示任何错误:”-这是因为您没有检查它们。添加
$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常)致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解在C:\WWW\htdocs\test\批发\php\getproduct.php:10堆栈跟踪:#0 C:\WWW\htdocs\test\批发\php\getproduct.php(10):PDOStatement->execute()#在C:\WWW\htdocs\test\wholesale\php\getproduct.php的第10行中,我尝试添加单引号,但仍然没有显示任何内容。该字段是一个VarChar。即使使用此方法,它似乎也不会显示。如果字段中有两个单词,会有什么区别吗?我尝试添加了一个try-and-catch,但也没有显示。我不确定我是否正确添加了该语句,但使用您提供的显示错误代码仍然没有显示任何内容?我把这句话写错了吗?@Elevant请看@Fred ii-他会到的;-)(很好的回答,顺便说一句,和往常一样:P)我会让这些改变有点道理,尽管有保留words@Elevant阴暗地;-)太好了,终于解决了,我没有意识到保留的话的事情,谢谢你,伙计,我会看看保留的作品等等。我真的不明白你用蜱虫环绕是什么意思。@elevate非常欢迎你,很高兴能帮上忙,cheers@Fred-我介意我做一个小改动,在这个伟大的答案的结尾添加两行代码吗?
  $sql = "SELECT * FROM `order` WHERE itemName = ? "; 
  $stmt = $conn->prepare($sql);
  $stmt->execute(array($itemName));