我正在从CSV文件中读取行并存储在PHP数组中。我创建了一个将数组内容保存到MySQL表中的函数。但是,它只保存了大约210行,而数组的位置超过100K ......我检查了数组大小,它显示的内容远远多于保存到数据库中的内容。 MySQL接受的每个操作都有限制吗?
此外,MySQL没有显示任何错误。它只会加载那些少量记录而且就是它。
我的功能:
function save_uar($data)
{
if (isset($data))
{
foreach($data as $row)
{
$id = $row['_id'];
$period = $row['period'];
$reviewStatus = $row['reviewStatus'];
$dataSource = $row['dataSource'];
$dataId = $row['dataId'];
$offset = $row['offset'];
$employeeId = $row['employeeId'];
$firstName = $row['firstName'];
$lastName = $row['lastName'];
$resourceName = $row['resourceName'];
$resourceType = $row['resourceType'];
$resourceUserId = $row['resourceUserId'];
$role = $row['role'];
$reference = $row['reference'];
$resourceGroup = $row['resourceGroup'];
$businessUnit = $row['businessUnit'];
$lifeCycle = $row['lifeCycle'];
$userComment = $row['userComment'];
$extractDate = $row['extractDate'];
$reason = $row['reason'];
$reviewDate = $row['reviewDate'];
$reviewerId = $row['reviewerId']
$sql = "INSERT INTO uar VALUES (
'".$id."', '
".$period."', '
".$reviewStatus."', '
".$dataSource."', '
".$dataId."',
".$offset.",
".$employeeId.", '
".$firstName."', '
".$lastName."', '
".$resourceName."', '
".$resourceType."', '
".$resourceUserId."', '
".$role."', '
".$reference."', '
".$resourceGroup."', '
".$businessUnit."', '
".$lifeCycle."', '
".$userComment."', '
".$extractDate."', '
".$reason."', '
".$reviewDate."', '
".$reviewerId."'
); ";
$result = $this->db->query($sql);
}
}
}
答案 0 :(得分:1)
正如@ Num6所暗示的那样,在转义变量后代码工作了。我使用了CodeIgniter函数:
$sql = "INSERT INTO uar VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
$result = $this->db->query($sql, array($id, $period ,$reviewStatus, $dataSource, $dataId, $offset, $employeeId,
$firstName, $lastName, $resourceName, $resourceType, $resourceUserId, $role,
$reference, $resourceGroup, $businessUnit, $lifeCycle, $userComment, $extractDate,
$reason, $reviewDate, $reviewerId));
当我尝试直接从浏览器运行该函数时,我确认了这个问题(之前我遵循了jquery结果)。 现在,我在插入执行查询所花费的时间方面遇到了问题,但这是另一个与此主题没有直接关系的问题。
谢谢大家!
答案 1 :(得分:0)
也许其中一个查询会停止,因为它为其列提供了无效数据?
是否已启用错误和警告消息?您可以在PHP的顶部执行此操作:
error_reporting(E_ALL);
ini_set('display_errors', 1);
让它停在一个糟糕的查询上来抓住它:
if ($result === false) exit(0);
您应该考虑一次读取一个csv行,并将其传递给预准备语句,而不是使用100k数组填充数组。