2017-04-02 23 views
-2

私は、mysqlテーブルの追加、削除、表示、および更新に細かい機能を使用できるWebアプリケーションを作成しています。これはMVC形式を使用して行われます。何らかの理由で、私の挿入機能を使ってデータを入力しようとすると、このエラーが出ます。ここに私のコードです。なぜ私の挿入機能は動作しませんか?

public static function insert($job_title, $min_salary, $max_salary) 
{ 
    $min_salary = intval($min_salary); 
    $max_salary = intval($max_salary); 
    $db = DB::prepare('INSERT INTO `Job` (`job_title`,`min_salary`,`max_salary`) VALUES ("$job_title",.$min_salary,.$max_salary)'); 
    $db->execute(); 
    $job = $db->fetch(); 
    return $job; 
} 

これは、情報を入力しようとしたときに発生するエラーです。

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax;

誰が間違っているのを見ることができますか?

+1

構文エラーがあるため –

+0

SQL注入可能な文字列補間の代わりにクエリパラメータを使用すると、問題が発生する可能性があります。 – David

+0

$ dbを印刷してください。問題がまだ見つからない場合は、ここに印刷された値を記入してください。 –

答えて

0

PHPでは、文字列を一重引用符でカプセル化すると、変数置換は実行されません。変数を文字列に含めるには、二重引用符を使用する必要があります。

$job_title = 'Something'; 
$min_salary = '500'; 
$max_salary = '1000'; 

$query = 'INSERT INTO `Job` (`job_title`,`min_salary`,`max_salary`) VALUES ("$job_title",.$min_salary,.$max_salary)'; 
echo $query.PHP_EOL; 

$query = "INSERT INTO `Job` (`job_title`,`min_salary`,`max_salary`) VALUES ('$job_title',.$min_salary,.$max_salary)"; 
echo $query.PHP_EOL; 

// Job title should be escaped and the salaries should be validated as numeric 
$job_title = addslashes($job_title); 
$query = "INSERT INTO `Job` (`job_title`,`min_salary`,`max_salary`) VALUES ('$job_title',.$min_salary,.$max_salary)"; 
echo $query.PHP_EOL; 

出力:

INSERT INTO Job (job_title , min_salary , max_salary) VALUES ("$job_title",.$min_salary,.$max_salary)

INSERT INTO Job (job_title , min_salary , max_salary) VALUES ('Something',.500,.1000)

INSERT INTO Job (job_title , min_salary , max_salary) VALUES ('Something',.500,.1000)

通常、を準備は、SQLインジェクションから保護するために、クエリからのデータを分離するプロセスを意味します。

関連する問題