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

行を取得するために結果をフェッチするのを忘れただけです...それが、コードが期待どおりに機能しなかった理由です! 心に留めておくべきもう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 に答える