我必须使用php的mysql改进的库插入一行到mysql中具有VARBINARY类型主键的表中。 该字段的内容是一个计算出来的sha1散列。PHP-使用预准备语句在mysql中插入二进制数据
如果我运行查询的老路上它完美的作品:
$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('是',$ id,$ field1);' – nash 2009-11-17 11:43:10
$ id的值是一个sha1散列。它不是一个整数。其他领域不会导致问题,但主要是字符串。 – 2009-11-17 13:37:44
另外一个用于在解决此问题的同时保留准备好的语句的安全性。 – HoldOffHunger 2016-05-25 01:13:38