【问题标题】:mysqli prepared statement doesn't seem to workmysqli 准备好的语句似乎不起作用
【发布时间】:2013-07-23 10:08:26
【问题描述】:

我有以下代码:

<?php
if(!empty($_POST)){
    $db = new mysqli('localhost', 'root', '', 'verif1');
    $password = $_POST['pass'];
    $username = $_POST['user'];
        $table = "admins";
    $password = hash("sha256", $password);
    $statement = $db->prepare("SELECT COUNT(*) FROM {$table} WHERE username = ? AND password = ?");
    $statement->bind_param("ss", $username, $password);
    $statement->execute();
    $statement->bind_result($numrows);
    if($numrows == 1){
        echo "yeah correct!<br>";
    }else{
        echo "No :(<br>";
    }
}


?>

<form action="" method="POST">
    <input type="textbox" name="user">
    <br>
    <input type="password" name="pass">
        <br>
    <input type="submit">
</form>

我确信一切都是正确的(没有错误抛出,什么都没有)它只是不起作用! 我尝试 print_r() 来查看返回的反对意见,我得到了这个: 在执行()之后我这样做:

print_r($statement);
die();

它给了我这个:

mysqli_stmt 对象([affected_rows] => -1 [insert_id] => 0 [num_rows] => 0 [param_count] => 2 [field_count] => 1 [errno] => 0 [error] => [error_list] => 数组 () [sqlstate] => 00000 [id] => 1)

【问题讨论】:

    标签: php mysqli statements


    【解决方案1】:

    如果您查看文档 - http://www.php.net/manual/en/mysqli-stmt.bind-result.php,您会发现您忘记了 fetch() 数据

    $statement->fetch();
    

    【讨论】:

      【解决方案2】:

      您可以使用以下代码来计算行数,而不是$statement-&gt;bind_result($numrows);

      $statement->store_result();
      if ($statement->num_rows == 1)
          echo "yeah correct!<br>";
      } else {
          echo "No :(<br>";
      }
      

      【讨论】:

      • @YourCommonSense 你介意更详细地了解它是如何不起作用的。这是官方PHP website 提供的代码。不是专门说你错了,只是想找个解释。
      • @Brandon Enriquez:如果你想计算一个表中有多少行怎么办?您会选择所有内容来获取行数吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      • 2015-06-15
      • 2012-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多