0

mysql には、以下のコードがあります。

$row = mysql_fetch_assoc($query);
$dbactive = $row['active'];

if ($dbactive == 1){

...

}...

しかし、私のプロジェクトでは mysqli を使用する必要があります。そのため、以下で変更しようとしましたが、うまくいきません。上記のmysqlのステートメントと一致するように、mysqliの以下のステートメントを修正するのを手伝ってくれる人はいますか?

アップデート:

mysqliでの私の試み:

   // don't use $mysqli->prepare here
        $query = "SELECT TeacherForename, TeacherSurname, TeacherUsername, TeacherPassword, Active FROM Teacher WHERE TeacherUsername = ? AND TeacherPassword = ? LIMIT 1";
        // prepare query
        $stmt=$mysqli->prepare($query);
        // You only need to call bind_param once
        $stmt->bind_param("ss",$teacherusername,$teacherpassword);
        // execute query
        $stmt->execute(); 
        // get result and assign variables (prefix with db)
        $stmt->bind_result($dbTeacherForename,$dbTeacherSurname,$dbTeacherUsername,$dbTeacherPassword, $dbActive);

            while($stmt->fetch()) {

      if ($teacherusername == $dbTeacherUsername && $teacherpassword == $dbTeacherPassword) {
   if ($dbActive == 1){

        $loggedIn = true;
}
      }

}
4

4 に答える 4

0

単一の行をフェッチするには、次を使用できます。

if($query = $db->prepare("your sql query where field1=? AND field2=?")){

    $query->bind_param('ss', $user_id); 
    $query->execute();
    $query->bind_result($field1, $field2);
    $query->fetch();
    echo $field1;

}
于 2012-08-10T14:36:38.323 に答える
0

while1 行だけを返す場合は、ループは必要ありません。bind_result()x列を取り、それらの値を順番に、渡された変数に割り当てます。したがって、結果に 1 列の 1 行のみが含まれると仮定すると、bind_result($dbactive)は の場合と同じになり$dbactive = $row['active']ますmysql_*

于 2012-08-10T14:31:06.203 に答える
0

変数をバインドすると、->fetch() を呼び出すたびに、結果の行の値がその変数に自動的に配置されます。あなたはそのバインディングをあなたの

$dbactive = $stmt['active'];

$stmt は結果オブジェクトであり、行オブジェクトまたは配列ではありません。クエリを介して取得したデータは含まれません。

于 2012-08-10T14:31:59.690 に答える
0

クエリメソッドを使用するだけで、

$result = $myslqi->query($query);
while($row = $result->fetch_object()){
  $row->active …
}
于 2012-08-10T14:33:39.067 に答える