我有一个数据库表,有几个BIT(1)
类型的列。如果我忘记准备好的陈述,我可以很容易地做这样的事情:您如何使用PDO预处理语句和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
列的预准备语句,如果是这样,如何?
你可以试试这个不带参数
访问http://计算器.com/questions/10540483/pdostatement-mysql-insertion-value-0-into-a-bit1-field-1-written-1/34578200#34578200 – saeed