【发布时间】:2014-03-10 07:18:54
【问题描述】:
我有一个包含几个BIT(1) 类型列的数据库表。如果我忘记了准备好的语句,我可以很容易地做这样的事情:
UPDATE tablename SET
bit_column_1 = b'1',
bit_column_2 = b'0'
这会很完美。但是,无论我尝试什么,在使用准备好的语句时,该值始终为 '1'。
如果$_POST['bit_col'] 是0,我已经完成了以下操作:
$stmt = $dbh->prepare("UPDATE tablename SET
bit_col = :bit_col ");
// First attempt
$stmt->bindValue('bit_col', $_POST['bit_col']);
// Second attempt
$stmt->bindValue('bit_col', $_POST['bit_col'], PDO::PARAM_INT);
// Third attempt
$stmt->bindValue('bit_col', "b'{$_POST['bit_col']}'");
然后我尝试更改准备好的语句以将b 放在那里,但我得到了number of bound variables does not match number of tokens
$stmt = $dbh->prepare("UPDATE tablename SET
bit_col = b:bit_col ");
$stmt->bindValue('bit_col', $_POST['bit_col']);
$stmt = $dbh->prepare("UPDATE tablename SET
bit_col = b':bit_col' ");
$stmt->bindValue('bit_col', $_POST['bit_col']);
另外值得一提的是PDO::ATTR_EMULATE_PREPARES 设置为true。将此设置为false 需要我进行大量重构,因为我在不知不觉中管理数据库连接。
所以我的问题是,是否可以在 MySQL 中使用带有 BIT 列的预处理语句,如果可以,如何使用?
【问题讨论】:
-
你可以不带参数试试这个
访问stackoverflow.com/questions/10540483/…
标签: php mysql pdo prepared-statement bit-manipulation