2016-05-09 83 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