1

このようなことをすることは有効ですか、私は1つ以上の演算子を見たことはありません:

$insert = 'INSERT into fhours (' .$cols . ') VALUES ('.$query.')';
$update = sprintf("UPDATE fhours SET %s WHERE fname='$fname' AND lname='$lname'", $field_list);

$result = $db->query($update) or $db->query($insert) or die('uhoh');`
4

4 に答える 4

3

これには2つの問題があります。

1つは、パラメーター化されたクエリを使用できることです。 PDOを見てください、これはあなたを大いに助けます。これは複数の挿入に対して高速であるだけでなく、SQLインジェクションについてそれほど心配する必要はありません。

2つ目は、 MySQLON DUPLICATE KEY UPDATEを使用してこの問題を処理できることです。そうしないと、クエリが失敗したときに、なぜ失敗したのかわかりません。重複した重要な問題ではなかった可能性があります。

それ以外は、コードの観点からはor問題ありません。

于 2011-05-20T16:02:34.067 に答える
0

論理演算子はいくつでも連鎖できます。

また、mysql の「重複キー」メカニズムも考慮する必要があります。

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

于 2011-05-20T16:00:40.980 に答える
0

有効ですか?はい。おすすめですか?いいえ。

die()失敗した SQL クエリからの -ingの問題は、ユーザーが最終的に目にするものです。これは、少量のテキストしかない可能性のある恐ろしい画面です。それは非常に悪いです。

代わりに、完了の失敗をユーザーに伝えることができる方法でこれらのエラーを処理する必要があります。

$update_result = $db->query($update);
if(!$update_result) {
  // Yikes! Tell the user something went wrong!
  // Show them an error page or error message
}

$insert_result = db->query($insert);
if(!$insert_result) {
  // Yikes! Tell the user something went wrong!
  // Show them an error page or error message
}

実際、 set_error_handlerを調べることもお勧めします。これにより、次のようにPHP パスを公開する可能性のある恐ろしいエラーを表示する代わりに、致命的な PHP エラーをキャプチャできます。

致命的なエラー: 688 行目の /check/out/my/directory/structure/wp-admin/includes/file.php のオーバーロードされたオブジェクトまたは文字列オフセットで代入演算子を使用できません

より専門的に見える一般的なエラーページにそれらを送信できます.

于 2011-05-20T16:08:49.893 に答える
0

mysql replace into 構文を調べることをお勧めします

于 2011-05-20T16:46:04.203 に答える