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
值?它们里面有什么特殊的字符吗?我最后把它整理成了一个语法问题。