3

既存の MySQLi クエリがあります。

$conn = dbConnect('query');
$galNumb = "SELECT COUNT(pj_gallery_id) FROM pj_galleries WHERE project = {$project}";
$gNumb = $conn->query($galNumb);
$row = $gNumb->fetch_row();
$galTotal = $row[0];

$project に含まれるクエリ文字列の値と一致するプロジェクトごとのギャラリーの数をカウントします。

それは完璧に機能しますが、準備されたステートメントと比較して安全ではありません。私はこれを2日間調査してきましたが、このステートメントを準備済みステートメントとして書く方法を学ぶことができません. ありとあらゆる助けが非常に高く評価されます。

更新: 私はここで私のパンツの座席で飛んでいます. 上記を準備済みステートメントとしてコーディングする方法を示す必要があるだけです。この種のことは、PHP の学習のように私の脳に共鳴するものではありません。PHP のマニュアルはわかりにくく、既に PHP を理解している人向けに書かれているようです。

つまり、ページに結果を表示できるようにするには、上記のコードのプリペアド ステートメント バージョンが必要です。現在、私のDBにあるものでは、数値は3である必要があり、一貫して1を返します.

質問をより適切に表現できるように、もっと知っていればよかったのですが、残念ながら、まだ学習中です。謝罪いたします。

更新 2: 提案と調査に基づいて、このクエリを作成しましたが、データベースに実際に何があるかに関係なく、常に値 1 を返します。

$galNumb = "SELECT COUNT(pj_gallery_id) FROM pj_galleries WHERE project_part = ?";
$stmt = $conn->prepare($galNumb);
$stmt->bind_param('i', $project);
$gNumb = $stmt->execute();

繰り返しますが、やりたいことは、各プロジェクトにあるギャラリーの数をカウントすることだけです。これは簡単なはずですが、私には向いていません。現在、DB には 3 つのギャラリーを含む 1 つのプロジェクトがあります。クエリは 3 を返す必要があります。

4

2 に答える 2

3

これはとても簡単です。これにより、SQL ステートメントが準備され、実行され、最初の行がフェッチされます。

<?php

// create the prepared statement
$stmt = $conn->prepare('SELECT COUNT(pj_gallery_id) FROM pj_galleries WHERE project = ?');

// bind a variable to the statment
// the character denotes the type of the variable
// 's' for string
// 'i' for integer
$stmt->bind_param('i', $project);

// execute the query
$stmt->execute();

// get the result variable
$result = $stmt->get_result();

// fetch the row
$row = $result->fetch_row();

if ($row) {
    echo "The count is " . $row[0]; 
}

?>

ドキュメントは非常に簡単です。下部にコード例があります。

http://php.net/manual/en/mysqli.prepare.php

于 2012-12-06T02:12:09.847 に答える
2
$stmt = $dbConnection->prepare('SELECT COUNT(pj_gallery_id) FROM pj_galleries WHERE project = ?');
$stmt->bind_param('s', $project);

$stmt->execute();
于 2012-12-06T02:12:46.860 に答える