Php 无效参数编号:绑定变量的数量与使用pdo的令牌数量不匹配
这个问题把我彻底难住了,我已经查看了关于堆栈溢出的其他回答问题,但没有一个回答我的问题 ** 代码: ** 在我的sql查询中。我这样做的原因是因为目前我只需要sql表中的一行Php 无效参数编号:绑定变量的数量与使用pdo的令牌数量不匹配,php,mysql,sql,pdo,Php,Mysql,Sql,Pdo,这个问题把我彻底难住了,我已经查看了关于堆栈溢出的其他回答问题,但没有一个回答我的问题 ** 代码: ** 在我的sql查询中。我这样做的原因是因为目前我只需要sql表中的一行 感谢您的帮助:)。另外,不管是谁投票否决了我,都不应该有特权投票否决任何人。我很清楚地提出了我的问题。我的php代码有点粗略,但是如果你因为这个原因投票否决我,这会适得其反,并且可能会阻止新用户在这个网站上发布问题。如果新用户不来,那么你将输给其他竞争对手。感谢所有提供帮助的人。占位符只能在查询中表示值。永远不要使用字
感谢您的帮助:)。另外,不管是谁投票否决了我,都不应该有特权投票否决任何人。我很清楚地提出了我的问题。我的php代码有点粗略,但是如果你因为这个原因投票否决我,这会适得其反,并且可能会阻止新用户在这个网站上发布问题。如果新用户不来,那么你将输给其他竞争对手。感谢所有提供帮助的人。占位符只能在查询中表示值。永远不要使用字段/表名或其他SQL关键字
UPDATE :pcid SET :count = ':token' WHERE ID='1'
^^^^^--field ^^^^^^--value
^^^^^--field
如果要动态插入表/字段名,则必须使用良好的旧sql注入技术,如
$table = $source_of_pcid
$field = $source_of_count
$sql = "UPDATE $table SET $field = :token";
首先,PDO和mysql并不混合在一起 删除mysql\u real\u escape\u字符串 删除此
$count=':token'
周围的引号,将其理解为$count=:token
(占位符周围不能有引号)
在更新中,您必须在您的$pcid
周围加上回勾,并结合我在评论和回答中的其他建议
$pcid = $_POST['ID'];
...
$stmt = $dbh->prepare("UPDATE `$pcid` SET `$countNew` = :token WHERE ID='1'");
...
根据您的一条评论,这是一条错误消息: MySQL服务器版本,以便在“888 SET 00:00=”:token“WHERE ID='1''第1行”附近使用正确的语法 看看错误告诉你的是什么,
靠近888
,这些错误不会就此停止
表名不能以数字开头或包含数字
根据文件:
经验法则:如果将占位符替换为文字字符串
'hello'
或数字42
,此查询是否有效?如果没有,则不能在此处使用占位符。(请记住,字符串'hello'
与标识符(表名、列名、索引名等)完全不同。)。您不能为表名(:pcid
)/列名(:count
)使用占位符,也不需要在:token
周围加上明确的引号(根据您的编辑):首先,您混合了两种类型的API,PDO和mysql\uuu
,就像在mysql\u real\u escape\u string
中一样-您不能混合这两种类型。添加$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常)代码>打开连接后立即将错误报告添加到文件顶部。打开连接后立即将错误报告添加到文件顶部谢谢,我的sql语法中的问题很明显:不客气。更改$pcid=mysql\u real\u escape\u字符串($\u POST['ID'])
只需$pcid=$\u POST['ID']但是您有一个名为countDataToHour()
的函数,我们不知道它的作用。我建议您在PHP.net上浏览一下,然后开始一步一步地构建代码。确保您的数据库连接也是PDO,而不是mysql。编写代码时,错误报告是一个很有价值的工具。我将重新打开你的问题,但如果它因为其他原因关闭,它将超出我的控制。由于某些原因,我上次编辑只保存了一半。问题是我没有将$count转换为sql表中定义的值(这是我忘记添加的countDataToHour()位)。我已将代码编辑为新格式。但是仍然有一个错误:MySQL服务器版本的正确语法使用接近“888 SET 00:00=”:token“WHERE ID='1''在第1行”谢谢,我将使用您的技术恢复到使用反sql注入技术,并返回给您结果。但是,我将要吃晚饭,所以可能需要一段时间。好的,我已经更新了代码,我的浏览器在那里不再定义错误,但它仍然无法执行查询。如何失败?您收到“执行查询失败”消息了吗?检查$dbh->errorInfo()
以查看实际有用的消息。
$table = $source_of_pcid
$field = $source_of_count
$sql = "UPDATE $table SET $field = :token";
$pcid = $_POST['ID'];
...
$stmt = $dbh->prepare("UPDATE `$pcid` SET `$countNew` = :token WHERE ID='1'");
...