0

我正在尝试将具有 48 行的 excel 文件中的文本(UTF-8 编码)插入 MySQL 表中。只有 38 行被插入。有些行确实有特殊字符,如“/”、“?”、“:”、“”、“.”、“()”、“'”、“””、“!”。

foreach ($ret as $rec) {
    if($count == 0) {
        $count++;
        continue;
    }

    $insert = "INSERT INTO chall (description, time, coin, mode, kids, teens, adults, theme_id, type_id) VALUES ('{$rec['A']}', '{$rec['B']}', '{$rec['C']}', '{$rec['D']}', '{$rec['E']}', '{$rec['F']}', '{$rec['G']}', '{$_REQUEST['theme_id']}', 1)";
    $ins_query = mysql_query($insert) or mysql_error();
    if(0)
    {
        die("Error! Can Not Upload Data...");
    }
}

下面是一个成功插入数据库的文本示例: 假装为 E!消息。这是一个例子。请两个人快速回答你这个问题:“其中哪些不是颜色——黑色、棕色、口香糖、蓝色、吉姆色、蓝色或绿色?”

下面是一个没有插入数据库的例子: Zig-a-zig-ah!找一群小伙伴重演这个测试,并在公共场合重拍辣妹组合的视频。让陌生人加入其中!

我已经尽可能多地进行了研究,但没有找到任何答案。10 行没有插入到 db 表中。有什么我想念的吗?非常感谢您的帮助。

4

2 回答 2

0

您应该按照@Marc 的建议修复 mysql_error

此外,您应该使用fgetcsv函数来解析文件并检查每行是否有正确数量的字段。

因为这

$_REQUEST['theme_id']

恶意用户可以在您的查询中注入他想要的任何内容(sql 注入)。

永远不要相信用户发送的内容

于 2016-08-04T14:12:00.793 回答
0

这是不正确的:

$ins_query=  mysql_query($insert) or mysql_error();
                                   ^^^^^^^^^^^^^^

mysql_error()返回一个字符串。这意味着如果mysql_query()失败(并返回一个 boolean false,您将错误字符串分配给$ins_query。这意味着$ins_string永远不能是 boolean false,这是您应该测试以检测失败的内容。

接着

if(0)

将始终评估为 false 并且不执行任何操作die,因此您无法检测何时发生错误。

你应该有

 $result = mysql_query(...);
 if($result === false) {
     die(mysql_error());
 }

请注意,您很容易受到sql 注入攻击

于 2016-08-04T14:02:28.763 回答