【问题标题】:PDO version of mysql_num_rows($result)==0) [duplicate]mysql_num_rows($result)==0) 的 PDO 版本 [重复]
【发布时间】:2013-01-26 13:21:02
【问题描述】:

可能重复:
Alternative for mysql_num_rows using PDO

^ 我相信这不是同一个问题 - 其他作者的代码与我的不同,需要不同的答案。我成功地从这篇文章中得到了答案,并将其标记为已回答。现在一切正常(其他“重复”线程没有帮助。


如果没有找到结果,我想显示“No Client Found”消息,以下代码是否有 PDO 方法?:

$result = mysql_query($sql) or die(mysql_error()."<br />".$sql);
if(mysql_num_rows($result)==0) {
    echo "No Client Found";

我尝试了以下...

<?php                               
$db = new PDO('mysql:host=localhost;dbname=XXXXXXXXXXXX;charset=utf8','XXXXXXXXXXXX', 'XXXXXXXXXXXX');

    $query = $db->query('SELECT * FROM client');

    if ($query == FALSE) {
      echo "No Clients Found";
    }
    else
    {
    foreach($query as $row)
    {
     <some code here>
    }   
    }           
    ?>  

我错过了什么吗?

我已阅读:http://php.net/manual/en/pdostatement.rowcount.php 但没有帮助

【问题讨论】:

    标签: php mysql pdo


    【解决方案1】:
    <?php                               
    $db = new PDO('mysql:host=localhost;dbname=XXXXXXXXXXXX;charset=utf8','XXXXXXXXXXXX', 'XXXXXXXXXXXX');
    
        $query = $db->query('SELECT * FROM client WHERE ID = 10');
    
        if ($query->rowCount() != 1) {
          echo "No Clients Found";
        }
        else
        {
        foreach($query as $row)
        {
         <some code here>
        }   
        }           
        ?>  
    

    在 PDO 中,rowCount 方法用于对返回的结果进行计数。如果您想检查是否存在唯一性,您的查询必须选择一些唯一的东西,例如电子邮件地址或用户名,否则,如果您想至少找到一行,请将条件更改为:

    if ($db->rowCount() == 0)
    

    有教程:PDO for MySQL developers

    【讨论】:

    • 使用此代码我得到:Fatal error: Call to undefined method PDO::rowCount() :/
    • @potts 应该是$query-&gt;rowCount(),而不是$db-&gt;rowCount()。同样的警告仍然适用,rowCount() 被记录为对SELECT 不可靠,它可能适用于 MySQL,但如果您稍后更改 RDBMS,可能会导致问题。
    • 可能不会很快改变。我还有一个问题。如何在 where 子句中输入数组? $query = $db-&gt;query('SELECT * FROM client where client =($ids)'); 那样吗?
    • @potts 你可以看看here
    • 我看了看,但我不知所措!这是我迄今为止的代码:davidpottrell.co.uk/paste/where.txt
    【解决方案2】:

    PDOStatement::rowCount() 在某些数据库中不返回受 SELECT 语句影响的行数。 Documentation 下面的代码使用SELECT COUNT(*)fetchColumn()。还准备了语句和try & catch 块来捕获异常。

    <?php
    // Get parameters from URL
    $id = $_GET["client"];
    try {
        $db = new PDO('mysql:host=localhost;dbname=XXXX;charset=utf8', 'XXXX', 'XXXX');
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        // Prepare COUNT statement
        $stmt1 = $db->prepare("SELECT COUNT(*) FROM client WHERE client = ?");
         // Assign parameters
        $stmt1->bindParam(1,$id);
        $stmt1->execute();
        // Check the number of rows that match the SELECT statement 
        if($stmt1->fetchColumn() == 0) {
            echo "No Clients Found";
        }else{
            //echo "Clients Found";
            // Prepare Real statement
            $stmt2 = $db->prepare("SELECT * FROM client WHERE client = ?");
         // Assign parameters
            $stmt2->bindParam(1,$id);
            $stmt2->setFetchMode(PDO::FETCH_ASSOC);
            $stmt2->execute();
            while($row = $stmt2->fetch()) {
                //YOUR CODE HERE  FROM
                 // Title
                 echo '<div id="portfolio_detail">';
                 //etc.etc TO
                 echo '<div><img src="'."/client/".$row[client].'_3.png"/></div>';
                 echo '</div>'; 
            }//End while
        }//End if else
     }//End try 
     catch(PDOException $e) {
        echo "I'm sorry I'm afraid you have an Error.  ". $e->getMessage() ;// Remove or modify after testing 
        file_put_contents('PDOErrors.txt',date('[Y-m-d H:i:s]').", myfile.php, ". $e->getMessage()."\r\n", FILE_APPEND);  
     }
    //Close the connection
    $db = null; 
    ?>
    

    【讨论】:

    • 尝试准备好的语句//prepare statement $stmt = $db-&gt;prepare(('SELECT * FROM client WHERE name = ? AND other = ? ' ); // Assign parameters $stmt-&gt;bindParam(1,$name); $stmt-&gt;bindParam(2,$other);//Execute query $stmt-&gt;setFetchMode(PDO::FETCH_ASSOC); $stmt-&gt;execute();
    • 代码末尾是否缺少 }?
    • 我的 foreach 有一个可以打开它的支架 - 它会在哪里关闭? foreach($query as $row) {
    • 我为 foreach 添加了右括号和括号。
    • 奇怪 - 我已经完全复制了你的代码并将我的代码放在里面 - 看着它应该可以工作,但我得到一个空白页......我的代码在这里:davidpottrell.co.uk/paste/error.txt
    猜你喜欢
    • 1970-01-01
    • 2014-01-20
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多