Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO对象:无效参数编号:绑定变量的数量与令牌的数量不匹配_Php_Mysql - Fatal编程技术网

Php PDO对象:无效参数编号:绑定变量的数量与令牌的数量不匹配

Php PDO对象:无效参数编号:绑定变量的数量与令牌的数量不匹配,php,mysql,Php,Mysql,我得到了上述的错误不能为我的生活找出原因 我确信我只有两个变量要绑定,而且我确实绑定了这两个变量 当我单独使用每个条件执行此操作时,即其中1=1和郊区=:郊区或其中1=1和名称像\''%:Name%\'时,我没有任何错误 尽管这两个条件中的后一个不返回任何结果,但是当我在MySQL工作台中测试它时,它的工作方式与我预期的一样 有人能解释一下这个问题吗?在使用占位符值时,在查询中保留任何和所有转义都很重要。值本身应该是空的,如果您严格遵守使用占位符值的规则,PDO将为您处理转义 按以下方式指定:

我得到了上述的错误不能为我的生活找出原因

我确信我只有两个变量要绑定,而且我确实绑定了这两个变量

当我单独使用每个条件执行此操作时,即
其中1=1和郊区=:郊区
其中1=1和名称像\''%:Name%\'
时,我没有任何错误

尽管这两个条件中的后一个不返回任何结果,但是当我在MySQL工作台中测试它时,它的工作方式与我预期的一样


有人能解释一下这个问题吗?

在使用占位符值时,在查询中保留任何和所有转义都很重要。值本身应该是空的,如果您严格遵守使用占位符值的规则,PDO将为您处理转义

按以下方式指定:

$queryString = 'SELECT * FROM n8593370.items AND Suburb = :suburb AND Name LIKE \'%:name%\'';

$stmt = $pdo->prepare($queryString);
$stmt->bindValue(':suburb', $suburb);
$stmt->bindValue(':name', $name);

$stmt->execute();
$results = $stmt->fetchAll();
"...name LIKE :name..."
然后你用这种方式绑定:

$queryString = 'SELECT * FROM n8593370.items AND Suburb = :suburb AND Name LIKE \'%:name%\'';

$stmt = $pdo->prepare($queryString);
$stmt->bindValue(':suburb', $suburb);
$stmt->bindValue(':name', $name);

$stmt->execute();
$results = $stmt->fetchAll();
"...name LIKE :name..."

删除
1=1
,因为这是一个重言式,没有任何意义。在执行之前执行
echo$queryString
,并注释掉execute,看看您传递了什么。1=1就在那里,这样我就可以有条件地为查询附加条件。但是,是的,为了提问的缘故,我会把它评论出来:)我想你误解了。我要求您注释掉
$stmt->execute()
,并回显您的$queryString,以便在完成参数绑定后查看其中的内容。这样调试就更容易了。非常棒,有帮助的堆,语句仍然没有返回类似的结果,即使它在workbench上返回,但至少我没有收到错误。您使用的是什么类型的
$name
值?它们里面有什么特殊的字符吗?我最后把它整理成了一个语法问题。