【问题标题】:num_rows not working pdo,mysqli, always return 0num_rows 不工作 pdo,mysqli, 总是返回 0
【发布时间】:2015-04-07 18:17:36
【问题描述】:

我有一个有趣的问题。

// 在带有函数的 pdo 中 --> 不起作用

function UserIsExist($name)
{
    global $db;
    $stmt = $db->prepare("SELECT id FROM tarskereso_users WHERE email = '$name' LIMIT 1");
        $stmt->execute();
        if ($stmt->fetchColumn() == 1) return 1;
        else return 0;
}

// 使用 MySQLi --> 不工作

function UserIsExist($name)
{
    global $db;
    $stmt = $db->prepare("SELECT id,email FROM tarskereso_users WHERE email = ? LIMIT 1");
        $stmt->bind_param('s', $name);
        $stmt->execute();
        $stmt->store_result();
        if ($stmt->num_rows == 1) 
            return 1;
        else 
            return 0;
        $stmt->close();
}

//在Register.php中

 ... other ..
        if(UserIsExist($user) == 1)
            $error_msg = "Is Exist";
        else
        {
            $birthdate = $year.'.'.$month.'.'.$day;
            CreateUser($user,$pass,$birthdate,$sex);
                $error_msg = 'Success';
        }

所以,功能不工作,我尝试:

$stmt = $db->prepare("SELECT id,email FROM tarskereso_users WHERE email = ? LIMIT 1");
        $stmt->bind_param('s', $name);
        $stmt->execute();
        $stmt->store_result();

        if ($stmt->num_rows > 0) 
            ... other ...
        else 
            echo 'isnt exist...';
        $stmt->close();

但不起作用,num_rows 总是返回 0。并且数据库中的帐户已成功创建

【问题讨论】:

  • 看起来您的查询正在寻找电子邮件,但您正在将名称传递给您的函数。这可能是问题吗?
  • 您是否对所有涉及的变量(包括数据库连接变量)进行了var_dump()
  • 我的连接:$db = new PDO('mysql:host=127.0.0.1;dbname=asdelontest;charset=utf8', 'user', 'pw', array(PDO::ATTR_EMULATE_PREPARES = > 假,PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)) var_dump($db); --> object(PDO)#1 (0) { } var_dump($name); --> 字符串(17)“hdasda@bassda.com”
  • 我只尝试使用文本,我删除了 @ 和点,并且这个工作......但是 email = '$email' 字符串是真的

标签: php mysql pdo mysqli


【解决方案1】:

在 pdo 中,num_rows 不起作用。 您必须使用 $sql->rowCount() 方法来获取表中的记录数。

<?php
    $sql = $con->prepare("<YOUR SQL QUERY HERE>");
    $sql->execute();
    if($sql->rowCount() > 0){
        echo $sql->rowCount() ." rows found";
    }
?>

【讨论】:

  • SQL中存在行,但是$sql->rowCount() == 0
  • 再次正确检查您的 SQL 查询。查询表达式必须匹配属性选择逻辑。如果 sql 查询没有正确的代数逻辑,则查询返回 0 行。
  • 或者您可以使用具有“count(*)”列的查询,该列根据您的 WHERE 子句计算获取的行数。在获取数据时,可以使用 PDO 语句为code $numRows = $sql->fetch(PDO::FETCH_ASSOC)['count'];回声 $numRows;
猜你喜欢
  • 2011-09-26
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多