2017-04-02 78 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注入的方法。