【发布时间】:2010-12-17 09:37:47
【问题描述】:
我必须使用 php 的 mysql 改进库向 mysql 中的表插入一行,该表的主键类型为 VARBINARY。 该字段的内容是计算的 sha1 哈希。
如果我以旧方式运行查询,它会完美运行:
$mysqli->$query("INSERT INTO table (id, field1) VALUES (0x" . $id . ",'" . $field1 . "')");
但是当我尝试将其作为准备好的语句执行时,我不知道该怎么做。如果 我执行等效的操作:
if($stmt = $mysqli->prepare("INSERT INTO table (id, field1) VALUES (?, ?)")) {
$stmt->bind_param('ss', "0x".$id, $field1);
//execute statement
}
它抛出一个异常,说内容对于这个字段来说太大了。如果我尝试将其作为 BLOB 字段插入:
if($stmt = $mysqli->prepare("INSERT INTO table (id, field1) VALUES (?, ?)")) {
$stmt->bind_param('bs', $id, $field1);
//execute statement
}
没有错误,插入了行,但是标识符字段现在是空的(不是空的,空的)。
我知道我可以混合查询并输入连接在字符串中的 id 和其他字段作为准备好的语句的绑定参数,但我只是想知道插入它的正确方法是什么,也许它会将来帮助别人。
【问题讨论】:
-
执行此操作时,$id 和 $field1 的值是多少? $id 是整数吗?如果是这样,您是否尝试过将其绑定?
stmt->bind_param('is', $id, $field1); -
$id 的值是一个 sha1 哈希。它不是整数。其他字段不会导致问题,但主要是字符串。
-
另外一个用于在解决此问题的同时尝试保留准备好的语句的安全性。
标签: php mysql prepared-statement