2011-07-11 21 views
0

これは本当に簡単なことですが、何らかの理由で動作しません。私のコードをheres。mysql_query()が非常に異常に失敗する

私は、ユーザー名または電子メールが存在するかどうかをチェックする機能(クラスのその一部)作っています:

public function exists ($what, $who) 
{ 
    $sql = "SELECT * FROM users WHERE $what = $who"; 
    $query = mysql_query($sql); 

    if (mysql_num_rows($query) != 0) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

関数は何も返しません。実際には、私は通常のPHPを介してそのクエリを実行する場合も何も返しません。なぜか分からない。

このコードの以下の部分は完全にニュースのエントリを返します。

function fetch($id = '') 
{ 
    if (empty($id)) 
    { 
     $query = 'SELECT * FROM news ORDER BY id desc'; 
    } 
    elseif (is_numeric($id)) 
    { 
     $query = "SELECT * FROM news WHERE id = $id"; 
    } 
    else 
    { 
     $route->to(SITE_URL); 
    } 
    $result = mysql_query($query); 

    if (mysql_num_rows($result) > 0) 
    { 
     return $result; 
    } 

} 

私は混乱しています。

+0

機能が今まで何も返さないではないでしょう。クエリの結果に応じて常に真または偽を返します。 mysql_error()を使用することをお勧めします。 – phant0m

+1

[Little Bobby Tables](http://xkcd.com/327/)をご存知ですか? – Jacob

答えて

5

問題は、あなたがあなたのクエリに引用符が不足しているということです。

$sql = "SELECT * FROM users WHERE $what = $who"; 
//SELECT * FROM users WHERE username = Mario is not a valid query 

は次のようになります。

$sql = "SELECT * FROM users WHERE $what = '$who'"; 

あなたはIDに対してチェックしているので、他のクエリはに対してこのような場合には、作業しています文字列(この場合は引用符が必要です)

+0

問題は、$文字列属性またはid属性を指定できることです。もし彼がIDと照らし合わせたら? – phant0m

+0

id = '4'のテーブルからSelect *を実行することができます。 –

+0

おそらくPDO(http://php.net/manual/en/pdo.prepared-statements.php)でパラメータ化されたクエリを使用したいと思っています。 。これは、 '$ id'がユーザから提供された場合に現在可能なSQLインジェクションからあなたを救うでしょう。 –

0

クエリの実行に失敗し、php.iniの画面でエラーがオフになっている可能性があります

クエリの正しい実行に関する中間検査を追加してください:

$query = mysql_query($sql); 

if ($query === FALSE) { 

    // log error with mysql_errno($conn) and mysql_error($conn); 

} else { 

    if (mysql_num_rows($query) != 0) { 

     return true; 

etc. etc. 
関連する問題