2016-06-24 6 views
2

を使用する:私は現在、ログインスクリプトに取り組んでいる、と私はこのコードを持って準備された文のFETCH_ASSOC(PHPのmysqliの)

$selectUser = $db->prepare("SELECT `id`,`password`,`salt` FROM `users` WHERE `username`=?"); 
$selectUser->bind_param('s', $username); 
$selectUser->execute(); 

if ($selectUser->num_rows() < 0) 
    echo "no_user"; 
else 
{ 
    $user = $selectUser->fetch_assoc(); 
    echo $user['id']; 
} 

は、ここで私は取得エラーです:

Fatal error: Uncaught Error: Call to undefined method mysqli_stmt::fetch_assoc()

私が試しました

$result = $selectUser->execute(); 
$user = $result->fetch_assoc(); 

以上...何も処理されていません。

別のStackOverflow質問に私を参照しないでください、私はそれらから理解できませんでした。

ありがとうございました!

+1

mysqlIndドライバ – JYoThI

+0

が必要です。インストールできない場合は、他のどのオプションを使用して同じ結果を得る必要がありますか? – Daniel

+0

while($ result-> fetch()){ ........ } – JYoThI

答えて

3

fetch_assocmysqli_stmtオブジェクトの一部ではないためです。 fetch_assocmysqli_resultクラスに属します。あなたは、最初の結果オブジェクトを取得し、その後fetch_assocを呼び出すためにmysqli_stmt::get_resultを使用することができます。

また
$selectUser = $db->prepare("SELECT `id`,`password`,`salt` FROM `users` WHERE `username`=?"); 
$selectUser->bind_param('s', $username); 
$selectUser->execute(); 
$result = $selectUser->get_result(); 
$assoc = $result->fetch_assoc(); 

、あなたが変数にクエリの列をバインドし、代わりにfetch()を使用するようにbind_resultを使用することができます。

$selectUser = $db->prepare("SELECT `id`,`password`,`salt` FROM `users` WHERE `username`=?"); 
$selectUser->bind_param('s', $username); 
$selectUser->bind_result($id, $password, $salt); 
$selectUser->execute(); 
while($selectUser->fetch()) 
{ 
    //$id, $password and $salt contain the values you're looking for 
} 
0

1)あなたはmysqlIndドライバが必要です。

変数$dbは、mysqli_stmtタイプであり、mysqli_resultではありません。 mysqli_stmtクラスにはfetch_assoc()メソッドが定義されていません。

あなたはそのget_result()メソッドを呼び出すことによって、あなたのmysqli_stmtオブジェクトからmysqli_resultオブジェクトを取得することができます。このためには、mysqlIndドライバがインストールされている必要があります!

代替はこの

$selectUser = $db->prepare("SELECT `id`,`password`,`salt` FROM `users` WHERE `username`=?"); 
    $selectUser->bind_param('s', $username); 

    $selectUser->execute(); 
    $selectUser->bind_result($id, $password,$salt); 

    while ($selectUser->fetch()) { 
     printf("%s %s %s\n", $id, $password,$salt); 
    } 

for more info about this Reference link

0

は、今の選択肢の話をしてみてください。

PDOは、mysqliとは異なり、このような問題はありません。追加のモジュールをインストールする必要はなく、用意されたステートメントから配列を取り出すことができます。

$stmt = $db->prepare("SELECT `id`,`password`,`salt` FROM `users` WHERE `username`=?"); 
$stmt->execute([$username]); 
$user = $stmt->fetch(); 

if (!$user) { 
    echo "no_user"; 
} else { 
    echo $user['id']; 
} 

を参照してください、それは正確にあなたが書くために2回以下のコードを期待し、必要となるように動作します。 other wonderful featuresは言うまでもありません。

関連する問題