好的,所以我是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,并且不确定问题的来源。
如果我的陈述中出现错误或任何看似错误的错误,请告诉我。
答案 0 :(得分:4)
首先,您使用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'];
}
?>
&#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'
反过来抛出语法错误。
因此,最好立即立即逃避任何数据。
修改强>
您对prepare
和new 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';";