Php 准备好的语句错误。新手问题

Php 准备好的语句错误。新手问题,php,mysql,prepared-statement,Php,Mysql,Prepared Statement,我不知道这几行有什么问题: if ( $stmt = $db->prepare('SELECT * FROM users WHERE username = ? LIMIT 1'); $stmt->bind_param('s', $username); $stmt->execute(); $stmt->store_result(); $stmt->fetch(); $stmt->num_rows == 1;

我不知道这几行有什么问题:

    if  ( $stmt = $db->prepare('SELECT * FROM users WHERE username = ? LIMIT 1');
    $stmt->bind_param('s', $username);
    $stmt->execute();
    $stmt->store_result();
    $stmt->fetch();
    $stmt->num_rows == 1;
    )           

    {
    $errors[] = "Username is taken.";
    }

不确定你是如何得到其他代码的,但我认为你想要这样的代码:

$stmt = $db->prepare('SELECT * FROM users WHERE username = ? LIMIT 1');
$stmt->bind_param('s', $username);
$stmt->execute();
$stmt->bind_result($res);

if($stmt->num_rows == 1)
{
    $errors[] = "Username is taken.";
}

您的原始代码中存在不必要的获取,而且

您是否已将其包装在try/catch中?您可以在如何从pdo获取错误消息中看到一些有用的信息。语法完全无效?@JimL wrappin在一个try/catch中是一个没有双重意义的东西,请注意。一般来说,在try-catch中封装每个语句是没有意义的,尤其是使用默认的mysqli。
if($stmt = $db->prepare('SELECT * FROM users WHERE username = ? LIMIT 1'))
{
    $stmt->bind_param('s', $username);
    $stmt->execute();
    $stmt->store_result();
    if($stmt->num_rows > 0)
    {
        $errors[] = "Username $username is taken.";
    }
    $stmt->free_result();
    $stmt->close();
}