MySQLの更新または挿入またはDieクエリ
質問
このようなことをするのは有効です、私は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');`
. 解決
これには2つの問題があります。
最初は、パラメータ化されたクエリを使用できることです。 PDOを見る、これはあなたが大いにに役立ちます。これだけが複数のインサートのためより速いだけでなく、SQLインジェクションをそんなに心配する必要はありません。
他のヒント
あなたが好きなように多くの論理演算子をチェーンすることができます。
MySQLの「重複キー」メカニズムを考慮に入れるべきです。
> http://dev.mysql.com/doc / refman / 5.0 / en / insert-on-duplicate.html
有効ですか?はい。それはお勧めですか?いいえ。
失敗したSQLクエリからのdie()
-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パスを潜在的に露出する恐ろしいエラーを示す代わりに:
致命的なエラー:ASSIGN-OPを使用できません オーバーロードされたオブジェクトを持つオペレータNOR 文字列オフセットIN /check/out/my/directory/structure/wp-admin/includes/file.php. 688行目に
それらを一般的なエラーページに送ることができます。これはもっと専門的に見えます。
MySQLの置換を構文
に調べたい場合があります。