-2

私は準備されたステートメントに慣れてきました。結果をより簡単に操作できるものにバインドするループを使用して、クエリが機能しています。

ここで、別のクエリを追加したいのですが、正しい構文がわかりません

/* Create a new mysqli object with database connection parameters */
$mysqli = new mysqli($hostname_db, $username_db, $password_db, $database_db);
if(mysqli_connect_errno()) {
  echo "Connection Failed: " . mysqli_connect_errno();
  exit();
}

/* Create a prepared statement */
if($stmt = $mysqli -> prepare("SELECT * FROM table WHERE id = ?")) {

    /* Bind parameters, s - string, b - blob, i - int, etc */
    $stmt -> bind_param("i", $rid);
    $stmt -> execute();

    /* USE loop to bind result and fetch */
    $meta = $stmt->result_metadata();
    while ($field = $meta->fetch_field()) {$parameters[] = &$row[$field->name];}
    call_user_func_array(array($stmt, 'bind_result'), $parameters);
    while ($stmt->fetch()) {
      foreach($row as $key => $val) { $x[$key] = $val;
      }
      $results[] = $x;
    }
    /* Close statement */
    $stmt -> close();

------------------>SHOULD I PUT ANOTHER QUERY HERE?


   }

------------------>OR SHOULD I PUT ANOTHER QUERY HERE INSTEAD?

   /* Close connection */
   $mysqli -> close();

----------------->Or, should I put it here

//END mysqli query method

3 つのポジションのどれが最適な場所/ベスト プラクティスであるかはわかりません。私は試行錯誤でそれを成し遂げることができましたが、何がベストプラクティスであるかを知りたいのですが、明確な答えを見つけることができないようです.

前もって感謝します。

4

1 に答える 1

2

ステートメントを下に置くだけです。close() を使用しない、mysqli の準備済みステートメントを使用しない、200 を収集しない:

$stmt = $pdo -> prepare("SELECT * FROM table WHERE id = ?");
$stmt -> execute(array($rid));
$results = $stmt -> fetchAll(); // for many rows

$stmt = $pdo -> prepare("SELECT id FROM table WHERE name = ?");
$stmt -> execute(array($name));
$id = $stmt -> fetchColumn(); // for single scalar value

$stmt = $pdo -> prepare("SELECT * FROM table WHERE id = ? LIMIT 1");
$stmt -> execute(array($rid));
$row = $stmt -> fetch(); // for single row

等々

または、さらにインテリジェントなライブラリを使用すると、さらに

// one single line to get your $results instead of screenful of code, mind you
$results = $db->getAll("SELECT * FROM table WHERE id = ?i",$rid);
// as well as others
$id      = $db->getOne("SELECT id FROM table WHERE name = ?s", $name);
$row     = $db->getRow("SELECT * FROM table WHERE id = ?i LIMIT 1",$rid)

まだ未加工の mysqli を使用したいですか?

于 2013-05-24T03:52:34.983 に答える