我有一个脚本,我提交了一些输入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')");
答案 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就是一个例子。