[英]PHP PDO PostgreSQL issue
如果參數中包含空格,則在將參數傳遞給sql查詢時遇到問題。 該代碼是
$statement="select di_timestamp, di_item_value
from data_item
where
fk_fc_id=(select fc_id
from field_column
where
fc_description ilike :sensor
and
fk_mds_id=( select mds_id
from monitored_data_set
where fk_pa_id=(select pa_id
from pilot_ambient
where
pa_ambient_name ilike :room
and
fk_sp_id=(
select sp_id
from School_Pilot
where sp_description ilike :name
)
)
)
)";
$query = $databaseConn->prepare($statement);
$query->execute(array(':sensor'=>$sensor,':room'=>$room,':name' => '%'.$school.'%'));
但是,如果sensor包含任何空格,查詢將失敗。 我該如何解決? 我嘗試將引號放在參數中,將引號放在查詢中,但沒有任何效果。
您可以在准備好的語句參數中傳遞空格字符,而無需引號或進行任何特殊處理。
這是一個演示:
<?
$pdo = new PDO('pgsql:dbname=test');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = "SELECT 1 WHERE 'abc de' ilike :pattern";
try {
$stmt = $pdo->prepare($query);
$stmt->execute(array(":pattern"=>'ABc %'));
var_dump($stmt->fetchAll());
}
catch(PDOException $e){
echo "Error". $e->getMessage();
}
?>
它不會產生任何錯誤並顯示正確的結果:
array(1) { [0]=> array(2) { ["?column?"]=> int(1) [0]=> int(1) } }
如果要匹配的列的數據類型是CHAR(n)
類型,而不是VARCHAR(n)
或TEXT
,請注意尾隨空格將被視為不重要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.