我正在尝试将包含48行的excel文件中的文本(UTF-8 Encoded)插入到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!新闻。这是一个例子。请两个人快速回答这个问题:“其中哪些不是颜色 - 黑色,棕色,口香糖,蓝色,吉姆,蓝色或绿色?”
以下是未插入数据库的示例: 齐格-A-锯齿啊!获取一组芽来重新进行此测试,并在公共环境中由Spice Girls重制视频。让陌生人参与其中!
我尽可能多地研究,但没有找到任何答案。其中10行未插入db表。有什么我想念的吗? 非常感谢您的帮助。
答案 0 :(得分:0)
这是不正确的:
$ins_query= mysql_query($insert) or mysql_error();
^^^^^^^^^^^^^^
mysql_error()
返回一个字符串。这意味着如果mysql_query()
失败(并返回布尔值false
,则将错误字符串分配给$ins_query
。这意味着$ins_string
不能是布尔值false,这就是你应该测试以检测故障。
然后
if(0)
将始终评估为false并且不执行die
,因此您无法检测错误发生的时间。
你应该
$result = mysql_query(...);
if($result === false) {
die(mysql_error());
}
请注意,您很容易受到sql injection attacks的攻击。</ p>
答案 1 :(得分:0)
你应该将你的mysql_error修复为@Marc推荐
此外,您应该使用fgetcsv函数来解析文件,并检查每行上是否有正确数量的字段。
因为这个
$ _ REQUEST [&#39; theme_id&#39;]
恶意用户可以在查询中注入他想要的任何内容(sql注入)。
永远不要相信用户发送的内容