插入MySQL时的撇号问题

时间:2012-01-13 16:27:28

标签: php mysql database insert

我有一个脚本,我提交了一些输入MySQL数据库的字段,当我提交它现在成功通过但是如果其中一个字段有撇号,则永远不会插入到数据库中。我可以修改什么才能使其发挥作用?

if ($_POST) {
$name = trim($_POST['your_name']);
$email = trim($_POST['your_email']);
$answers = $_POST['answers'];
$i = 0;
foreach ($answers as $a) {
    if (trim($a))
        $i++;
}

if ($name && $email && $i >= 40) {
    $array = array();
    $q = mysql_query("select * from fields");
    while($f = mysql_fetch_array($q))
        $array[$f['label']] = $answers[$f['ID']];

    $array = serialize($array);
    $time = time();
    $ip = $_SERVER['REMOTE_ADDR'];
    $token = md5($time);

    $result = mysql_query("insert into data (submit_name, submit_email, submit_data, submit_confirm, submit_time, submit_ip, submit_token) 
        values ('$name', '$email', '$array', '0', '$time', '$ip', '$token')");

2 个答案:

答案 0 :(得分:3)

您需要escape characters with special meaning in MySQL in your data

改进代码的快速且方法是将所有字符串传递到mysql_real_escape_string,然后再将它们插入到SQL字符串中。

更好的方法是从mysql_query切换到允许使用bound parameters (preferably with prepared statements)的内容。

答案 1 :(得分:0)

使用mysql_real_escape_string(),因为这将解决撇号问题并至少部分帮助避免SQL注入攻击。如果您不想亲自使用PHP的内置PDO库,您可以考虑使用数据库抽象层(DBAL)。 ADODB就是一个例子。