PHP - rowCount()给出相同的值,无论字符串是否存在

时间:2014-09-12 09:48:16

标签: php mysql pdo

我有以下代码:

$queryMobileNumber = $dbh->prepare("SELECT mobile_number FROM $tableBusinessOwner WHERE business_owner_id = $businessOwnerIDTable");
$queryMobileNumber->bindValue( 1, $mobileNumberNew);
$queryMobileNumber->execute();

echo $businessOwnerIDTable;
echo '-';
echo $queryMobileNumber->rowCount();

我使用PDO连接到我的数据库。

以上检查用户插入的手机号码是否已存在于表格中。无论数字是否存在,当我回显$queryMobileNumber->rowCount();时,该值始终为1。

我不确定我错过了什么。我在error_log中没有收到任何错误。

3 个答案:

答案 0 :(得分:2)

正如PHP documentation

所解释的那样
  

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

     

如果关联的PDOStatement执行的最后一条SQL语句是SELECT语句,则某些数据库可能会返回该语句返回的行数。但是,并不保证所有数据库都有这种行为,不应依赖于便携式应用程序。

由于您正在进行选择,rowCount()不是您正在寻找的功能。

你能做什么呢?

<?php

$queryMobileNumber = $dbh->prepare("SELECT mobile_number FROM $tableBusinessOwner WHERE business_owner_id = $businessOwnerIDTable");
$queryMobileNumber->execute();

$res = $queryMobileNumber->fetch(PDO::FETCH_ASSOC);

echo $businessOwnerIDTable;
echo '-';
if(!empty($res['mobile_number')){
  echo $res['mobile_number'); //or whatever else
} else {
  echo 'N/A';
}

答案 1 :(得分:0)

您始终要获取您执行的任何查询以获取查询的数据。试试这个

$queryMobileNumber->execute();

$result = $queryMobileNumber->fetchAll();
echo $result->rowCount();

see documentation

您执行的查询的rowCount(选择,插入,删除)将返回您的查询执行次数

答案 2 :(得分:0)

如本例所示:http://php.net/manual/en/pdostatement.rowcount.php#example-1009

  

对于大多数数据库,PDOStatement :: rowCount()不返回受SELECT语句影响的行数。相反,使用PDO :: query()发出带有与预期SELECT语句相同的谓词的SELECT COUNT(*)语句,然后使用PDOStatement :: fetchColumn()来检索将返回的行数。然后,您的应用程序可以执行正确的操作。

<?php
$sql = "SELECT COUNT(*) FROM fruit WHERE calories > 100";
if ($res = $conn->query($sql)) {
/* Check the number of rows that match the SELECT statement */
  if ($res->fetchColumn() > 0) {
   ...

如果您只是想检查一个号码是否存在,那么对于mysql

,程序计数要求不高