我遇到了问题。当我使用PDO :: prepare()来构建某个查询,然后传递参数来执行时,查询将正确执行,但其中一个参数似乎没有插入到数据库中。在准备语句如下所示:在PDO查询中彼此相邻的两个参数?
... SET col = :par1-:par2 ...
所以我想要做的就是把价值“[PAR1] - [PAR2]”到数据库列。问题是第一个参数没有存储在数据库中,但破折号和第二个参数都是。因此,从上述查询存储在数据库中的结果值是“ - [par2]”。
为什么会这样?
我遇到了问题。当我使用PDO :: prepare()来构建某个查询,然后传递参数来执行时,查询将正确执行,但其中一个参数似乎没有插入到数据库中。在准备语句如下所示:在PDO查询中彼此相邻的两个参数?
... SET col = :par1-:par2 ...
所以我想要做的就是把价值“[PAR1] - [PAR2]”到数据库列。问题是第一个参数没有存储在数据库中,但破折号和第二个参数都是。因此,从上述查询存储在数据库中的结果值是“ - [par2]”。
为什么会这样?
你写的是一个整数减法。因此,您将par1
减去par2
的结果写入col
。
相反,你应该建立一个字符串$par1 . '-' . $par2
外PDO的,然后就通过它在通过一些其他的命名参数:
$stmt = $pdo->prepare('... SET col = :col');
$stmt->execute(['col' => $par1 . '-' . $par2]);
太棒了,谢谢! – Nate 2012-07-21 21:42:39
你将什么值(字符串,整数......)?目标列类型是什么?你有没有尝试在短划线周围添加空格? – DCoder 2012-07-21 17:40:31
@DCoder - 两个参数都是字符串。 – Nate 2012-07-21 18:15:38
然后,您需要按照NikiC的建议预先生成最终值,或者使用[CONCAT/CONCAT_WS](http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_concat)产生一个字符串。我会选择第一个选项。 – DCoder 2012-07-21 18:21:15