質問

このようなことをするのは有効です、私は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インジェクションをそんなに心配する必要はありません。

2番目は、 MySQLのON DUPLICATE KEY UPDATE <を使用できることです。/ a>あなたのためにこの問題を大事にするために。それ以外の場合、クエリが失敗したときは、失敗した理由がわかりません。重複した重要な問題がまったくあったかもしれません!

それ以外のorの観点からのコードはちょうどいいです。

他のヒント

あなたが好きなように多くの論理演算子をチェーンすることができます。

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の置換を構文

に調べたい場合があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top