2

より具体的な結果を返すために、(動作する) mySQL クエリを変更しようとしています。jobID と UserName を検索するように、ステートメントに変数を追加しました。$userName をステートメントに追加すると、それが壊れます。

比較のために、SQL ステートメントの 3 つのバリエーションと共に以下のコードを含めました。私以外の誰にとっても、それは当然のことだと思います...

前もって感謝します!

DB


// get all applicants from a User
public function GetAllMyApplications($from=false, $to=false, $user_name)
    {
    global $db;
    $applicants = array();

    if ($from >= 0 && $to > 0)
            {
                $sql_limit = ' LIMIT ' . $from .', ' . $to;
            }
            else
            {
                    $sql_limit = '';                
            }

    $user_name = "Bob Bobberton"; // reset this var for testing

    $sql = 'SELECT * FROM '.DB_PREFIX.'job_applications WHERE job_id = '. $this->mJobId . ' ORDER BY name ASC ' . $sql_limit; // This was the original SQL that worked

    $sql = 'SELECT * FROM '.DB_PREFIX.'job_applications WHERE job_id = '. $this->mJobId . ' AND name = ' . $user_name . ' ORDER BY name ASC ' . $sql_limit; // Added "and" $user_name - it breaks 

    $sql = 'SELECT * FROM '.DB_PREFIX.'job_applications WHERE job_id = '. $this->mJobId . ' AND name = "Bob Bobberton" ORDER BY name ASC ' . $sql_limit; // Replace var with value "Bob Bobberton" and it works


    $result = $db->query($sql);
    while ($row = $result->fetch_assoc())
    {
            $applicants[] = array('id' => $row['id'], 
                    'job_id' => $row['job_id'], 
                    'name' => $row['name'], 
                    'email_address' => $row['email_address'], 
                    'message' => str_replace(array("\r\n", "\r", "\n"), "<br />", $row['message']),
                    'resume_path' => base64_encode($row['resume_path']),
                    'created_on' => $row['created_on'],
                    'ip' => $row['ip']);
    }

    if (isset($applicants))
    {
        return $applicants;
    }else{
        return("");
    }
}
4

2 に答える 2

1

これを変える

' AND name = ' . $user_name . ' ORDER BY name ASC '

" AND name = '" . $user_name . "' ORDER BY name ASC "

そしてそれは動作します

于 2012-05-01T06:03:02.597 に答える
0

Satya が提供する解決策は十分ではありません。入力を適切にエスケープする必要があります。

$username文字が含まれていると仮定します"。それはあなたのSQL文を壊します。したがって、準備済みステートメントを使用するか、少なくとも関数を使用する必要がありますmysql_real_string_escape()

于 2012-05-01T20:42:09.803 に答える