当我将代码中的字符串替换为与这些字符串等效的变量时,我的代码会生成一个致命错误。
我正在尝试生成具有宽阔和相反叶子的树种符号列表。我使用 PDO 准备好的语句就可以做到这一点:
$stmt=$conn->prepare('SELECT Symbol FROM Leaf WHERE Type = ? AND BroadArrangement = ? ');
$stmt->execute(array('B' , 'O'));
$i=0;
while ($result = $stmt->fetch()) : ?>
<li><a href="#"><?php print_r($result['Symbol']); ?> </a></li>
<?php $i++;
endwhile;
当我替换查询和参数以与变量绑定时,会出现致命错误(见下文):
$q="'SELECT Symbol FROM Leaf WHERE Type = ? AND BroadArrangement = ? '";
$b= " 'B','O' ";
$stmt=$conn->prepare($q);
$stmt->execute(array($b));
$i=0;
while ($result = $stmt->fetch()) : ?>
<li><a href="#"><?php print_r($result['Symbol']); ?> </a></li>
<?php $i++;
endwhile;
致命错误:带有消息 SQLSTATE[42000] 的未捕获异常“PDOException”:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 ''SELECT Symbol FROM Leaf WHERE Type = 附近使用正确的语法。AND BroadArrangement = ? /Applications/MAMP/htdocs/Tree_ID_Website/Compare/practice_compare.php:253 中的“第 1 行”堆栈跟踪:#0 /Applications/MAMP/htdocs/Tree_ID_Website/Compare/practice_compare.php(253): PDOStatement->execute (数组)#1 {main} 在第 253 行的 /Applications/MAMP/htdocs/Tree_ID_Website/Compare/practice_compare.php 中抛出
我有一种感觉,我错过了一些简单的东西,但我不知道是什么。当我打印或回显变量 $q 和 $b 时,它们与在正常工作的代码部分中传递的字符串相同。是变量范围的问题吗?还是我需要稍微修改变量?我尝试了没有运气的引号。
从其他帖子来看,当查询包含保留关键字时,通常会出现此错误。但我的没有,我很困惑。
谢谢你的帮助。