2017-04-02 82 views
-2

我正在寫一個web應用程序,可以讓你使用crud功能來添加,刪除,查看和更新​​mysql表。它使用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注入的方法。