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);
。
- 现在,如果您要使用 PDO,请使用 PDO with prepared statements,它们更安全。
根据您在包含 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'
依次抛出语法错误。
因此,最好立即转义任何数据。
编辑
您对 prepare
和 new to PDO
的使用共同表明您已经在尝试使用准备好的语句,只是方法不正确。你离一份准备充分的陈述只差一点点。代码中的一种正确方法是
$sql = "SELECT * FROM `order` WHERE itemName = ? ";
$stmt = $conn->prepare($sql);
$stmt->execute(array($itemName));
请注意我们如何在您的查询中包含 ?
,然后我们会在您的 execute
调用中为其发送一个值。给你:)
- 使用 PDO with prepared statements 会解决这个问题。
好吧,我是 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);
。
- 现在,如果您要使用 PDO,请使用 PDO with prepared statements,它们更安全。
根据您在包含 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'
依次抛出语法错误。
因此,最好立即转义任何数据。
编辑
您对 prepare
和 new to PDO
的使用共同表明您已经在尝试使用准备好的语句,只是方法不正确。你离一份准备充分的陈述只差一点点。代码中的一种正确方法是
$sql = "SELECT * FROM `order` WHERE itemName = ? ";
$stmt = $conn->prepare($sql);
$stmt->execute(array($itemName));
请注意我们如何在您的查询中包含 ?
,然后我们会在您的 execute
调用中为其发送一个值。给你:)
- 使用 PDO with prepared statements 会解决这个问题。