2010-12-01 5 views
0

以下の関数を使用してmysqlエラーを記録すると思われることは何ですか?PHP MySQLエラーログ機能

<?php 
function sql_query($query) 
{ 
    $q = mysql_query($query); 
    if(!$q) 
    { 
    mysql_query('INSERT INTO mysql_errors (error_query, error_about) VALUES ('. 
    $query.', '.mysql_error().')'); 
    } 
    return $q; 
} 
?> 

これは便利ですか?どのように改善することができますか?

答えて

0

正しいエラーを誘発する方法を見つけたら、SQLインジェクションを使用することができます。

なぜMySQLのネイティブエラーログを使用しないのですか?彼らをDBに戻す何らかの理由はありますか?

0

あなたは入力をサニタイズしていないようですが、$ queryに 'が含まれているとどうでしょうか?別のSQLエラーが発生します。

0

もちろん、すでにデータベース接続を開いているので、ここで開く必要はありません。この関数は、2番目のクエリの値を一重引用符で囲んでいる限り、期待通りに機能します。関連するノートでは、mysql_errorログでは十分ではありませんか?

+0

私のウェブサイトは私のサーバーではなく、phpMyAdmin –

+0

を使ってデータベースを調べています。その場合は、他の人が触れているように入力をスクラブして、入力を単一引用符で囲みます。 – drewster

1

は次のようになります。

mysql_query("INSERT INTO mysql_errors (error_query, error_about, error_date) VALUES ('". 
    mysql_real_escape_string($query)."', '".mysql_real_escape_string(mysql_error())."',NOW())"); 

私は日付フィールドと消毒入力を追加しました。新しいエラーと古いエラーを区別する方法が必要であり、日付フィールドはそれを行います。