插入在MYSQL中不起作用


Insert not working in MYSQL

Am正在尝试使用jquery函数编写新记录。

$.post("insertuser.php",$("#rohanStart").serialize(),function(data){ 
    alert(data);
});

这似乎奏效了,我确实收到了回声卫星的警报。问题是没有将值写入数据库。查询语句中有什么错误吗?

mysql_query("INSERT INTO ajax_demo1( FirstName,LastName,Unit,Group,photo)
        VALUES (
            '".$arr['FirstName']."',
            '".$arr['LastName']."',
            '".$arr['Unit']."',
            '".$arr['Group']."',
            '".$arr['photo']."'
        )");
echo $arr['Group'];

首先不要使用jQuery或任何框架,它们依赖于专有的Microsoft JScript innerHTML方法,该方法无法正确处理DOM,从而在脚本编写中增加了大量的歧义。

其次,您没有正确地将进入数据库的数据转义,这是一个严重的安全问题。

第三,你的数据库查询方法并没有考虑错误处理,你只是直接把查询转储进去,并希望得到最好的结果。

你应该总是给你的查询编号,并附上它们,正如我在下面所做的那样。注意,除了错误之外,提前失败条件也是很好的,但是对于数据库结构,如果首先成功,然后未能增加缩进(增加一个空格,而不是浪费这个选项卡,因为你有五个屏幕可以水平滚动),你就应该执行,这样你就可以可视化自己代码中的位置。

$query1 = "SELECT * FROM table_name WHERE something='value'";
$result1 = mysql_query($query1);
if ($result1)
{
 $row1 = mysql_fetch_assoc($result1);
}
else {mysql_error_report($query1,mysql_error(),__FUNCTION__);}

如果你的主头包含(除了AJAX之外,所有请求都包含主头,对吗?)你应该有一个通用的MySQL错误处理功能,可以用来记录SQL错误。

以下是通用数据库错误处理程序。您应该有HTTP、JavaScript、PHP和SQL错误的管理错误日志,这样您就可以查看和更正访问者遇到的问题,而不是只给您带来不便。

function mysql_error_report($q,$e,$f)
{
 if (isset($_SESSION['database']))
 {
  if (isset($_SESSION['id_member'])) {$id = $_SESSION['id_member'];} else {$id = 0;}
  if (isset($_SESSION)) {$session = mysql_real_escape_string(session_id());} else {$session = 0;}
  $ip = mysql_real_escape_string(getenv('REMOTE_ADDR'));
  $query = mysql_real_escape_string($q);
  $error = mysql_real_escape_string($e);
  $function = mysql_real_escape_string($f);
  if (isset($_SESSION['type'])) {$type = mysql_real_escape_string($_SESSION['type']);} else if (isset($_SESSION['cms_browser'])) {$type = 'Browser';} else {$type = 'Unknown';}
  if (isset($_SERVER['REQUEST_URI'])) {$url = $_SERVER['REQUEST_URI'];} else {$url = '';}
  if (isset($_SERVER['HTTP_USER_AGENT'])) {$ua = mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']);} else {$ua = '';}
  $query1 = "INSERT INTO log_errors_sql (id_session, type, id_user, date, ip, function, mysql_error, mysql_query, url, user_agent) VALUES ('$session', '$type', '$id', NOW(), INET_ATON('$ip'), '$function', '$error', '$query', '$url', '$ua')";
  $result1 = mysql_query($query1);
  if (!$result1) {mysql_error_report_mail($q,$e,$f,$ua);}
 }
 else {mysql_error_report_mail($q,$e,$f);}
}

通过使用这种方法,您将加强您的编码实践,使其更加严格。你不想有歧义,你想对你的代码严格一点,因为你的代码主观性越小,你的代码就能处理得越多。

此外,你的留白空间非常宽松。

这个。。。

INSERT INTO ajax_demo1( FirstName,LastName,Unit,Group,photo)

应该这样格式化。。。

INSERT INTO ajax_demo1(FirstName, LastName, Unit, Group, photo)

你可能会问,为什么保持这样的空白很重要,如果你没有花太多时间在查找和替换上(查阅"Advanced find&replace",它在wine/Linux上工作,从性能上讲,它彻底抛弃了原生Linux控制台命令,而且它非常便宜,支持正则表达式等),你会发现自己在眨眼之间就进行了大规模的站点范围的编辑,因为即使是空白区域也是同样严格的方法。

如果你听从我的建议,请使用AFR(高级查找和替换)来搜索(但不是替换)"mysql_query"的所有实例,并更正你所写的所有内容的格式。混合一些AJAX通知,当你还在浏览器中没有一个alt选项卡时,你可以立即看到错误。我就是这样滚的。

当然,这样做会使调试更加容易。这不是鱼,这是钓鱼,我希望它能有所帮助。