0

私が欲しいのは、準備されたステートメントでこのコードを書くことです:

if (mysqli_num_rows(mysqli_query($link,"select name from accounts where name='$username'"))==1)
        {
            // some actions
        }

さて、それを行う方法は?

結果をphp変数に"INSERT INTO"入れる必要がないため、準備されたステートメントを作成する方法は知っていますが、準備ステートメントを保存してすぐに実行するにはどうすればよいですか?mysqli_query"SELECT"mysqli_num_rows($result)

編集: 私がやりたいことは、結果を php $result 変数に保存しながら、準備されたステートメントで mysqli_query() を実行することです。どうやってするか?

4

1 に答える 1

1

そのようなデータベース操作を決してチェーンしないでください。クエリは常に成功すると想定しています。これは悪い習慣です。決して成功を想定しないでください。操作が失敗することを常に想定し、成功をうれしい驚きとして扱います。

このように DB 呼び出しをデイジー チェーン接続しているため、返される結果ハンドルを実際にキャプチャすることはありませんmysqli_query()。そのため、実際には、クエリを実行してからその結果を破棄しています。

あなたはもっと似たものを持っているべきです

$result = mysqli_query($link, "....") or die(mysqli_error());
if (mysqli_num_rows($result)) == 1) {
    $row = mysqli_fetch_assoc($result);
    $anem = $row['name'];
}

また、このコードに示されていない手順を実行しない限り、SQL インジェクション攻撃に対して脆弱になります。

準備されたステートメントについては:

$stmt = mysqli_prepare($link, 'SELECT ... WHERE name=?');
mysqli_stmt_bind_param($stmt, 's', $name);
mysqli_stmt_execute($stmt);

$rows = mysqli_stmt_num_rows($stmt);

mysqli_stmt_bind_result($stmt, $fetched_name);

mysqli_stmt_fetch($stmt); // $fetched_name now contains the name from the DB
于 2013-08-28T21:49:55.587 に答える