我有以下代码:
$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中没有收到任何错误。
答案 0 :(得分:2)
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();
您执行的查询的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
,程序计数要求不高