[英]PDO query returns 0 when it should return rows
我正在使用PHP PDO运行查询。 我有以下功能:
protected function isStoreRegistered($name, $street1 ,$city, $country_id, $id) {
if($id == '0') {
$sql = " SELECT a.name, b.street1, b.city, c.id
FROM tablea a
LEFT JOIN tableb b ON a.fk_addressID = b.id
LEFT JOIN tablec c ON b.fk_countryID = c.id
WHERE a.name = '$name'
AND b.street1 = '$street1'
AND b.city = '$city'
AND b.fk_countryID = '$country_id'";
$result = $this->db->exec($sql);
} else {
// some other query
}
return $result;
}
发送到MySQL的查询如下所示:
SELECT a.name, b.street1, b.city, c.id
FROM sl_store a
LEFT JOIN sl_address b ON a.fk_addressID = b.id
LEFT JOIN sl_country c ON b.fk_countryID = c.id
WHERE a.name = 'test store'
AND b.street1 = 'Weselsgate 2'
AND b.city = 'Oslo'
AND b.fk_countryID = 'NO'
在Toad中运行此查询,返回1行。
但是,如果我执行print_r(result)
,它将输出0
(零)
我如何找出这里出了什么问题?
从文档 :
PDO :: exec()不会从SELECT语句返回结果。
而且由于您不进行任何修改(没有插入,删除或更新),因此不会影响任何行,这是PDO::exec
确实返回的结果。
如果您希望数据使用准备好的语句或PDO::query
。 如果需要行数,请在选择中使用计数。
如前所述和本手册中所述, PDO::exec()
不会从SELECT
语句返回结果。 相反,您应该尝试以下操作(注意参数绑定):
protected function isStoreRegistered($name, $street1 ,$city, $country_id, $id) {
if ($id == '0') {
$sql = " SELECT a.name, b.street1, b.city, c.id
FROM tablea a
LEFT JOIN tableb b ON a.fk_addressID = b.id
LEFT JOIN tablec c ON b.fk_countryID = c.id
WHERE a.name = :name
AND b.street1 = :street
AND b.city = :city
AND b.fk_countryID = :country";
$stmt = $this->db->prepare( $sql );
$vars = array(
'name' => $name,
'street' => $street1,
'city' => $city,
'country' => $country_id,
);
$result = $stmt->execute( $vars );
} else {
// some other query
}
return $result;
exec
返回受语句影响的行数,
在您的情况下为零,因为您正在执行选择
docs:-http: //php.net/manual/zh/pdo.exec.php
您的SQL没有以正确的方式使用PDO,
容易受到SQL注入的攻击
花了一些时间在参数绑定上
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.