我将网站移至新服务器并发现了奇怪的PDO行为:
$q = $db->prepare("INSERT INTO tabel SET info = :info, time = :date, active = :date");
$q->bindParam(':info', $info);
$q->bindParam(':date', $date);
$q->execute();
只有time
列获得$date
,active
一无所获
如果我改变它们active = :date, time = :date
那么反之亦然。只有第一列接收变量。其他人一无所获。
可以做什么,让它将两个:date
绑定到两列?没有重复:date1 :date2
。
答案 0 :(得分:2)
您必须将所有参数命名并匹配到它们的值,因此您必须使用您所说的内容::date2
并确保绑定它们,这样您最终会得到它们三个bindParam语句。
见这里:https://bugs.php.net/bug.php?id=33886
::这是一个可移植性的问题(只是为了分享)
[编辑/追加] ::
我想建议一个更好的练习,虽然在开始时它可能看起来很多工作:你为什么不使用stored procedures
?检查一下:http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html
这可以帮助您做的只是接受两个值作为参数,但在三列更新中使用它们。这是一个示例:
CREATE DEFINER=`root`@`localhost` PROCEDURE `InsertIntoTabel`
(IN paramINFO VARCHAR(50), IN paramDATE DATETIME)
BEGIN
INSERT INTO tabel
SET info = paramINFO
, time = paramDATE
, active = paramDATE;
END
然后将您的代码更改为:
$q = $db->prepare("CALL InsertIntoTabel (?,?)");
$q->bindParam(1, $info);
$q->bindParam(2, $date);
$q->execute();
但这只是一个建议。 :)
答案 1 :(得分:0)
根据PHP,bindParam的第二个参数是混合的,也许你可以试试这个:
$date = array();
$q->bindParam(':date', $date);