【问题标题】:Can't get number of affected rows with PDO无法使用 PDO 获取受影响的行数
【发布时间】:2014-10-01 17:35:18
【问题描述】:

昨天我将基于 mysqli 的代码更改为 PDO。所以我对 PDO 语句很陌生。我在获取匹配的 MySQL 数据数量时遇到问题。

我已经搜索了如何获取受影响的行数。我遇到了3种方法:

  1. 在 SQL 语句中使用 COUNT(*) SELECT COUNT(*) FROM blah WHERE blah = :blah

  2. 使用 fetchAll() 然后计数 $var = $db->fetchAll(); count($var);

  3. 最后一个 rowCount()。

根据php手册

PDOStatement::rowCount() 返回受相应 PDOStatement 对象执行的最后一个 DELETE、INSERT 或 UPDATE 语句影响的行数。

所以我没有尝试 rowCount()。我尝试了前两个选项。但是他们没有工作。我不知道我的代码有什么问题。

这是我的代码 我用于用户名(或电子邮件)是否已注册。

$sql = "SELECT * FROM WHERE uye_ka = :kullanici_adi";
$ka_varmi = $db_uye->prepare($sql);
$ka_varmi->bindParam(':kullanici_adi',$kullanici_adi,PDO::PARAM_STR,255);
$ka_varmi->execute();
$ka_sonuc = $ka_varmi->fetchAll();

if (count($ka_sonuc)) {
    $form_hata = true;
    $ka_ayni = true; 
    $kayit_msg[] = "Seçtiğin kullanıcı adı başka bir kullanıcı tarafından daha önceden alınmış Başka bir tane dene";
}

$sql2 = "SELECT * FROM WHERE uye_e_posta = :e_posta";
$e_varmi = $db_uye->prepare($sql2);
$e_varmi->bindParam(':e_posta',$kullanici_adi,PDO::PARAM_STR,255);
$e_varmi->execute();
$e_sonuc = $e_varmi->fetchAll();

if (count($e_sonuc)) {
    $form_hata = true;
    $e_ayni = true;
    $kayit_msg[] = "Girdiğin e-posta adresi daha önceden kullanılmış. Şifreni mi unuttun ? ";
}

我的代码有什么问题?

【问题讨论】:

  • 在执行后尝试print_r($ka_sonuc);,首先看看你的结果集是什么样子的
  • 即使您的错误是从查询中省略了表名,我还是要支持您,因为您是极少数能够将所有内容提取到数组中并对其进行计数的人之一。 +1,保持明智的发展方式。

标签: php mysql pdo


【解决方案1】:
SELECT * FROM WHERE uye_ka = :kullanici_adi

实际从哪里选择?你需要指定一个表名

SELECT * FROM  myTable WHERE uye_ka = :kullanici_adi
               ^

第二个查询也是如此。

【讨论】:

  • 我无法相信我已经因为这种问题挣扎了几个小时:)。谢谢!
  • 你知道你为什么要为这样一个简单的错误而挣扎吗?因为您没有重视错误消息的力量。当它不起作用时,您可以首先尝试echo $ka_varmi->errorInfo(); :) 这说明了一切
猜你喜欢
  • 1970-01-01
  • 2011-10-03
  • 2019-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
  • 2016-11-01
  • 2022-11-10
相关资源
最近更新 更多