2016-05-09 48 views
0

我正在将PHP中的一些MySQL查询转换为PDO准备的语句查询。使用%和concat编写的PDO语句

大多数查询是很简单的,但我所遇到的一对夫妇的查询,我不知道自己应该怎么看

在常规查询

我转换:

where field ='$type' 

where field =:type 

和改变

$results->execute(); 

分成

$ results-> execute(array('type'=> $ type));

方案1

通常

将它们转换当变量变为:查询中的类型,但与%那里它成为:类型%或:类型 '%'

where field like '$type%' 

方案2

当的concat中使用

concat(uuid(),'-$id') 

这应该如何处理?当变量前面有 - 时,我该如何处理?

任何帮助,将不胜感激。

回答

3

你需要明白的是a placeholder have to represent a complete data literal only

而且这样你的代码将是:

情景1

创建的PHP通配符搜索字符串,

$type = "$type%"; 

,然后你可以绑定它通常的方式。

方案2

只需添加一个论据CONCAT():

concat(uuid(),'-', :id) 
+0

也可以对场景#1使用绑定和'CONCAT' ...'WHERE字段像CONCAT(:type,'%')' – Phil

-2

在scenarion 1,你应该做的一样简单那些

$pdo = new PDO("mysql:host=localhost;dbname=database;","root",""); 
$smt = $pdo->prepare("...... WHERE col=:type"); 

Scenarion 1:

$smt->bindParam(":type", $type . '%' , PDO::PARAM_STRING); 

Scenarion 2:

$smt->bindParam(":type", concat(uuid(),"-$id") , PDO::PARAM_STRING); 

之后,你只需要执行,做你自己的东西:

$smt->execute(); 
+1

此代码将无法正常工作 –

+0

你能解释一下为什么吗? –

+2

@VasilShaddix在你的场景1中,'bindParam'需要一个变量(不是值)。在你的场景2中,PHP没有任何称为'concat()'或'uuid()'的内置函数。 – Mikey