如果参数中有空格,则在将参数传递给 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.'%'));
但是,如果传感器包含任何空格,则查询将失败。我该如何解决这个问题?我尝试在参数中加上引号,在查询中加上引号,但没有任何效果。
您可以在预准备语句参数中传递空格字符,而不带引号或任何特殊注意事项。
下面是一个演示:
<?
$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();
}
?>
它不会产生错误并显示正确的结果:
数组(1) { [0]=> 数组(2) { ["?列?=> 国际(1) [0]=> 国际(1) }}
如果要匹配的列的数据类型是 CHAR(n)
类型而不是 VARCHAR(n)
或 TEXT
,请注意尾随空格被视为不重要。