我在这里遗漏了一些东西。您可以看到我从逗号分隔的文本文件中获取信息。插入工作正常,直到它到达第二个变量$player_id
为空的点。如果它为空,则$town_name
会抛出错误。如果它不为空,并且$town_name
有一个带有.
或其他字符的字符串,则会失败,并且出于某种原因,它就像$player_id
一样空了!
我错过了什么!?
非常抱歉。以下是我从代码中获得的响应:
75767 ,, 1. + Harlekus%27s + city,519,851,5,414
查询无效:您的SQL语法出错;检查手册 对应于您的MySQL服务器版本,以获得正确的语法 在第2行''附近使用+ + Harlekus%27s + city',519,851,5,414)
这是我删除“'”.mysql_real_escape_string($ town_name)。“'”时得到的代码,只需用mysql_real_escape_string($ town_name)替换它:
80290,2299128,Spencer,414,371,0,3633无效的查询:未知 “字段列表”中的“Spencer”列
mysql_select_db($database_connI, $connI);
ini_set("memory_limit","100M");
mysql_query("towns");
$datafile = gzfile('towns.txt.gz');
if(!is_array($datafile)) die("File could not be opened");
foreach($datafile as $datum){
list($town_id, $player_id, $town_name, $island_x, $island_y, $number_on_island, $points) = explode(',', $datum);
if(is_null($player_id)) {
$player_id = 0;
}
$protectedInsert = sprintf('INSERT INTO towns (`town_id`,`player_id`,`town_name`,`island_x`,`island_y`,`number_on_island`,`town_points`)
VALUES (%s, %s, %s, %s, %s, %s, %s)',
$town_id,
$player_id,
"'".mysql_real_escape_string($town_name)."'",
$island_x,
$island_y,
$number_on_island,
$points);
$freed = mysql_query("TRUNCATE towns");// empty the table before inserting the new data
$result = mysql_query($protectedInsert);//Re-fill the table with updated data
if (!$result) {
print"$town_id, $player_id, $town_name, $island_x, $island_y, $number_on_island, $points <br><br>";
print"$INSERT <br><br>";
die('Invalid query: ' . mysql_error());
}
}
print "The database has been updated";
mysql_close($dbh);
答案 0 :(得分:0)
我会检查strlen($player_id)
vs is_null
,因为定义了$ player_id,但它可能有空格或没有值,这并不意味着它是NULL。
这可能是你的问题。
答案 1 :(得分:0)
您应该考虑使用fgecsv(http://php.net/manual/fr/function.fgetcsv.php)