繁体   English   中英

PDO查询应返回行时返回0

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM