Php 带有消息SQLSTATE[42000]:1064的PDO异常。在传递变量而不是字符串时发生
当我将代码中的字符串替换为与这些字符串等效的变量时,我的代码会生成一个致命错误 我正在尝试生成一个具有宽而对生叶子的树种符号列表。我用PDO准备的声明就可以做到这一点:Php 带有消息SQLSTATE[42000]:1064的PDO异常。在传递变量而不是字符串时发生,php,mysql,variables,Php,Mysql,Variables,当我将代码中的字符串替换为与这些字符串等效的变量时,我的代码会生成一个致命错误 我正在尝试生成一个具有宽而对生叶子的树种符号列表。我用PDO准备的声明就可以做到这一点: $stmt=$conn->prepare('SELECT Symbol FROM Leaf WHERE Type = ? AND BroadArrangement = ? '); $stmt->execute(array('B' , 'O')); $i=0; while ($result = $stmt-&
$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;
$stmt=$conn->prepare('SELECT Symbol FROM Leaf,其中Type=?和BroadArrangement=?');
$stmt->execute(数组('B','O'));
$i=0;
而($result=$stmt->fetch()):?>
这里有几个问题。首先,在$q
中构建语句时,先用单引号引用,然后用双引号引用。它只需作为普通PHP字符串引用一次:
// Quoted with just one set of quotes
$q="SELECT Symbol FROM Leaf WHERE Type = ? AND BroadArrangement = ?";
那么您的参数数组必须是一个数组,其中每个参数都是一个数组元素:
// Each param is an array element
$b = array('B', 0);
然后您可以准备并执行,将$b
作为参数传递给execute()
:
这不会像您期望的那样起作用:
$b= " 'B','O' ";
$c = array($b);
现在$c
将是一个包含一个元素的数组,字符串'B','O'
如果您确实有一个逗号分隔的字符串,以及如何将其转换为数组,则需要:
$c = explode(',' $b);
或者在您的情况下:
$stmt->execute( explode(',' $b) );
@Michael感谢您的快速回复和建议。我清理了代码,使其更符合逻辑,因此$b是一个数组,但仍然存在相同的问题。请参阅下面的答案。第一个错误是由于$q
上有额外的引号。太好了,谢谢。修复$q中的引号并使$b成为一个数组解决了这个问题。就语法而言,我还有很多东西要学。感谢您花时间帮助解决这个小问题。@user2140190非常欢迎您,也欢迎使用堆栈溢出。感谢您详细说明答案。现在我明白了为什么我不能像以前那样将单个字符串传递到数组中并期望多个值。干杯
$c = explode(',' $b);
$stmt->execute( explode(',' $b) );