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();
}