2012-07-21 185 views
3

我遇到了问题。当我使用PDO :: prepare()来构建某个查询,然后传递参数来执行时,查询将正确执行,但其中一个参数似乎没有插入到数据库中。在准备语句如下所示:在PDO查询中彼此相邻的两个参数?

... SET col = :par1-:par2 ... 

所以我想要做的就是把价值“[PAR1] - [PAR2]”到数据库列。问题是第一个参数没有存储在数据库中,但破折号和第二个参数都是。因此,从上述查询存储在数据库中的结果值是“ - [par2]”。

为什么会这样?

+0

你将什么值(字符串,整数......)?目标列类型是什么?你有没有尝试在短划线周围添加空格? – DCoder 2012-07-21 17:40:31

+0

@DCoder - 两个参数都是字符串。 – Nate 2012-07-21 18:15:38

+0

然后,您需要按照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

回答

6

你写的是一个整数减法。因此,您将par1减去par2的结果写入col

相反,你应该建立一个字符串$par1 . '-' . $par2外PDO的,然后就通过它在通过一些其他的命名参数:

$stmt = $pdo->prepare('... SET col = :col'); 
$stmt->execute(['col' => $par1 . '-' . $par2]); 
+0

太棒了,谢谢! – Nate 2012-07-21 21:42:39