php mysqli查询语句和受影响行的检查

时间:2016-10-11 08:29:42

标签: php mysqli

目前我正在研究PHP MYSQLi,PDO并且仍然难以处理一些基本语句也很困惑..我试图在存储之前检查我的数据库中是否已存在电子邮件,但似乎我的代码无效我测试了它。我错过了什么或者我需要修改我的代码..?

    $mysqli = mysqli_connect("localhost", "root", "", "mydbname");

    if (!$mysqli) {
        echo "Error: Unable to connect to MySQL." . PHP_EOL;
        echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
        echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
        exit;
    }

    $email="johnsmith@gmail.com";

    $username_query = "SELECT username FROM user WHERE email = ?";
    $statement = $mysqli->prepare($username_query);
    $statement->bind_param('s', $email);

    $statement->execute();
    $statement->store_result();
  

现在,我想知道一行是否受到影响。有记录   johnsmith@gmail.com在我的数据库上,但结果总是显示0。   $ mysqli-> affected_rows对我也不起作用..请赐教,谢谢。

    printf("row affected: %d.\n", $statement->num_rows);

2 个答案:

答案 0 :(得分:0)

num_rowsaffected_rows都是获取SELECT查询找到的行数的方法(鉴于查询确实找到了某些内容get_result()/store_result()

每个人都可以运行以下代码并查看

$email="johnsmith@gmail.com";

$statement = $mysqli->prepare("SELECT ?");
$statement->bind_param('s', $email);
$statement->execute();
$statement->store_result();

echo "affected_rows: $statement->affected_rows\n";
echo "num_rows: $statement->num_rows\n";
因此,这个问题只是由某种混淆引起的。

所以请不要让它成为另一种迷信的来源。

答案 1 :(得分:-1)

您需要获取结果。

$statement->store_result();之后:

$statement -> fetch();