2

一切都很好。数据库和表的名称,列的名称等。 $username 是好的并且存在于数据库中。然而,在此运行之后,如果我“警告”$dbuid,它会显示为 0,而 $dbusername 显示为空。MySQLi 不会抛出任何错误。(这就是为什么我做了 if(! .. ) echo error;,看看它是否会引发任何错误,但它工作得很好。)我哪里出错了?

if(!$msmysqli = new mysqli("localhost","root","","ms")){
   echo $msmysqli->connect_error;
}
if(!$stmt = $msmysqli->prepare("SELECT id,name,password FROM accounts WHERE name=?")){
   echo $msmysqli->error;
}
if(!$stmt->bind_param("s",$username)){
   echo $stmt->error;
}
if(!$stmt->execute()){
   echo $stmt->error;
}
if(!$stmt->bind_result($dbuid,$dbusername,$dbpassword)){
   echo $stmt->error;
}
$stmt->close();
4

1 回答 1

1

您只需忘记获取结果即可获得该行...这就是您的代码无法按预期工作的原因!要记住的另一件事是,至少在 php 中,对象在构造时总是返回其实例!语句 $msmysqli = new mysqli(...) 永远不会是假的!这就是为什么你应该检查你的连接,如图所示!

$msmysqli = new mysqli("localhost","root","","ms");

if ( $msmysqli->connect_errno ) echo $msmysqli->connect_error;

if( $stmt = $msmysqli->prepare("SELECT id,name,password FROM accounts WHERE name=?") ) {
    $stmt->bind_param("s",$username);
    $stmt->execute();
    $stmt->bind_result($dbuid,$dbusername,$dbpassword);
    $stmt->fetch();
    $stmt->close();
} else {
    echo $msmysqli->error;
}

$msmysqli->close(); 
于 2012-11-28T00:58:15.817 回答