PHPExcel вставляет 38 из 48 строк в MySQL из файла xlsx
Я пытаюсь вставить текст (в кодировке UTF-8) из файла Excel, который имеет 48 строк в таблицу 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! Новости. Это пример. Попросите двух человек дать вам быстрый ответ на этот вопрос: "Какие из них не являются цветами: черный, коричневый, камедь, синий, джим, синий или зеленый?"
Ниже приведен пример, который не был вставлен в db: Zig-a-zig-ah! Получить группу друзей, чтобы воспроизвести этот тест и переделать видео от Spice Girls в публичной обстановке. Получите незнакомцев, чтобы присоединиться к веселью!
Я исследовал столько, сколько мог, и не нашел никаких ответов. 10 строк не вставляются в таблицу БД. Есть ли что-то, что мне не хватает? Большое спасибо за помощь.
2 ответа
Это неверно:
$ins_query= mysql_query($insert) or mysql_error();
^^^^^^^^^^^^^^
mysql_error()
возвращает строку Это означает, что если mysql_query()
не удается (и возвращает логическое значение false
Вы назначаете строку ошибки $ins_query
, Это означает $ins_string
никогда не может быть логическим ложным, что вы должны проверять, чтобы обнаружить ошибку.
А потом
if(0)
будет всегда оценивать как ложное и не выполнять die
в любом случае, так что вы не можете определить, когда произошла ошибка.
У тебя должно быть
$result = mysql_query(...);
if($result === false) {
die(mysql_error());
}
И обратите внимание, что вы уязвимы для атак SQL инъекций.
Вы должны исправить свой mysql_error как рекомендуется @Marc
Также вы должны использовать функцию fgetcsv, чтобы проанализировать ваш файл и проверить, есть ли у вас правильное количество полей в каждой строке.
Из-за этого
$_REQUEST['theme_id']
злоумышленник может ввести в запрос все, что ему нужно (sql инъекция).
Никогда не верь тому, что отправил пользователь