[英]PHP PDO PostgreSQL issue
Having problems passing a parameter to a sql query if the parameter has spaces in it. 如果参数中包含空格,则在将参数传递给sql查询时遇到问题。 The code is
该代码是
$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.'%'));
However if sensor contains any spaces the query fails. 但是,如果sensor包含任何空格,查询将失败。 How can I resolve this?
我该如何解决? I've tried putting quotes in the parameter, quotes in the query, but nothing works.
我尝试将引号放在参数中,将引号放在查询中,但没有任何效果。
You may pass space characters in prepared statements parameters without quotes or any special care. 您可以在准备好的语句参数中传递空格字符,而无需引号或进行任何特殊处理。
Here's a demo: 这是一个演示:
<?
$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();
}
?>
It yields no error and displays the proper result: 它不会产生任何错误并显示正确的结果:
array(1) { [0]=> array(2) { ["?column?"]=> int(1) [0]=> int(1) } }
If the datatype of the column to match is of type CHAR(n)
as opposed to VARCHAR(n)
or TEXT
, be aware that trailing spaces are treated as non significant. 如果要匹配的列的数据类型是
CHAR(n)
类型,而不是VARCHAR(n)
或TEXT
,请注意尾随空格将被视为不重要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.