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 инъекция).

Никогда не верь тому, что отправил пользователь

Другие вопросы по тегам