2013-08-28 31 views
-2

我无法弄清楚什么是错的这几行:准备好的语句错误。新手问题

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."; 
    } 
+0

您是否已将它封装在try/catch中?你可以在这里看到一些有用的信息,如何从pdo获取错误消息。 http://prash.me/php-pdo-and-prepared-statements/ – JimL

+2

语法完全无效? – Jon

+0

@JimL在try/catch中进行包装是一个双重的毫无意义的事情,请关注你。一般来说,将try语句中的每个语句都包装起来是毫无意义的,尤其是默认的mysqli。 –

回答

0

不知道你有你的其他代码,但我想你想是这样的:

$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."; 
} 

您的原始代码中有一个不必要的提取,也是

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