PHP MySQLi 准备语句无法返回行

标签 php mysqli mysql-num-rows prepare

我已经将很多旧的 MySQL 内容转换为 PHP 中的 MySQLi,但在以下代码中遇到了问题:

### FETCH INCLUDES ###
$player=$_POST['player'];
$password=md5($_POST['password']);
#### DB CONNECTION ####
if(!$mysqli=new mysqli(DBHOST,DBUSER,DBPWD,DBNAME)) {$err=$mysqli->error; print($err); }
$sql="SELECT * FROM accounts WHERE name='?' AND passkey='?'";
if($stmt=$mysqli->prepare($sql)) {
    //$stmt->bind_param('ss',$player,$password);
    $stmt->execute();
    $stmt->store_result();
    if($stmt->num_rows==1) {
        $account=$stmt->fetch_assoc();
        // purely for debugging
        print_r($account);
        if($_SESSION['account']=$account) $account=true;
    } else {
        echo "Failed. Row count: ";
        print($stmt->num_rows);
        echo "<br />";
        $query=str_replace('?','%s',$sql);
        printf($query,$player,$password);
        $account=false;
    }
    $stmt->close();
} else {
    $err=$mysqli->error;
    print($err);
}

我已将故障范围缩小到查询本身。我返回 0 行,没有错误,所以我想我会输出查询(我要去那里的 str_replace 东西),我可以使用该查询使用来自 PHPMyAdmin 的相同查询从数据库返回一行

我哪里出错了?

编辑

我尝试将查询更改为基本查询而不绑定(bind)参数 - “SELECT * FROM table” 仍然没有返回任何行。所以这不是查询本身,而是我的准备、执行情况的顺序/格式中的内容

第二次编辑:我已将 $stmt->store_result() 添加到代码中,但仍然返回 0 行数。

第三次编辑: 我调查了连接和用户设置,看起来不错。我可以使用相同的用户和密码通过控制台连接到数据库,并且数据库名称相同。我真的很难过这个:(

最佳答案

$stmt->execute();之后添加一个$stmt->store_result();,因为看起来它必须在$之前调用一次stmt->num_rows...至少他们在示例中这样做(参见 http://php.net/manual/en/mysqli-stmt.store-result.php )。他们的意思是“num_rows”文档中的依赖关系。

其他想法:您检查 if($stmt->num_rows==1) {,您确定 num_rows 是 0 吗?我不知道“帐户”表的数据库结构。 “名称”是主键(或至少是唯一索引)吗?如果不是,则可能有多个列匹配。这只是一个可能出现问题的快速想法,并导致您在源代码中查找问题数小时。虽然问题出在其他地方。

关于PHP MySQLi 准备语句无法返回行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11978423/

相关文章:

php - 如何编写简单的数据库查询?

php - 如何删除字符串中的所有前导零

php - 调用未定义的方法 mysqli_stmt::get_result

Mysql 查询 - 如果一行中存在三个值?

php - MySQL查询网页显示mysql_numrows()错误

php - 在javascript中回显mysql语句

php - 如何使用php日期从mysql数据库获取数据?

mysql - mysqli::query的奇怪行为

php - mysqli_fetch_assoc()需要参数/调用成员函数bind_param()错误。如何获取并修复实际的mysql错误?

php - mysql_num_rows() 错误