Как взорвать массив и сохранить его в базе данных - PullRequest
0 голосов
/ 01 мая 2018

У меня есть массив с именем bookseat в моем php-файле. Я написал код, чтобы взорвать его и сохранить в моей базе данных.

Код выглядит следующим образом.

$bookseat = array(1, 2, 3);
$arrlength = count($bookseat);
$bookseatarray = explode(',', $bookseat);

$conn = new mysqli($servername, $username, $password, $db);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

if ($result = mysqli_query($conn, "SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'titan3d' AND TABLE_NAME = 'bookings'", MYSQLI_USE_RESULT)) {
        $row = mysqli_fetch_assoc($result);
        $now = $row['AUTO_INCREMENT'];
} else {
    echo mysqli_error($conn);
}

for($i = 0; $i < count($bookseatarray); ++$i){
    $SQL_project_has_type = "INSERT INTO bookseat (seat, bid)
    VALUES({$bookseatarray[$i]}, '$now')";
    mysql_query($SQL_project_has_type);
    }

if ($conn->query($sql) === TRUE) {
    header('Location: http://localhost/My%20Project/booksuccess.html');
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();

Часть с автоматическим приращением работает, но другие, похоже, не работают.

Когда код находится на стадии разработки, я получаю сообщение об ошибке: «Предупреждение: explode () ожидает, что параметр 2 будет строкой, массив задан в C: \ xampp \ htdocs \ My Project \ JSFiles \ book.php в строке 25» .

В чем здесь может быть ошибка? Может кто-нибудь помочь, пожалуйста!

Ответы [ 3 ]

0 голосов
/ 01 мая 2018
$bookseatarray = explode(',', $bookseat);

$ bookseat уже массив, поэтому он не будет работать; explode() должен иметь строку в качестве второго параметра (вы пытаетесь разбить массив на массив). Для этого нужно: $bookseat = "1,2,3";

Также не используйте mysql_query -> mysqli_query( ....

0 голосов
/ 01 мая 2018

Надеюсь, это поможет вам
Я проверил ваш код. В вашем коде есть несколько проблем, которые

  1. Ваш массив находится в форме int, но Разнесение работает, когда ваш массив вводит в строковой форме , поэтому вам не нужно
  2. Я предпочитаю использовать цикл Foreach для массивов. С помощью этого цикла вы можете легко извлечь значения массива.
  3. Вы должны определить переменную $ sql
  4. Не используйте mysql_query () , поскольку mysql заменен на mysqli_query ()

Итак, вот ваш проверенный код. «

$bookseat = array(1, 2, 3);
$conn = new mysqli($servername, $username, $password, $db);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);  
} 

if ($result = mysqli_query($conn, "SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'titan3d' AND TABLE_NAME = 'bookings'", MYSQLI_USE_RESULT)) {
    $row = mysqli_fetch_assoc($result);
} else {
    echo mysqli_error($conn);
}
foreach ($bookseat as $key => $value) {
        $SQL_project_has_type = "INSERT INTO bookseat (seat, bid)
        VALUES($value, {$row['AUTO_INCREMENT']})";
        mysqli_query($conn,$SQL_project_has_type);
}
$conn->close();

если ваш первый запрос работает правильно, тогда запрос цикла foreach будет работать нормально. Я заменил ваше значение $ row ['AUTO_INCREMENT'] на случайные значения, и оно отлично работает для меня

0 голосов
/ 01 мая 2018

Поскольку $bookseat уже является массивом чисел (в данном случае), вам не нужна часть explode(), просто используйте этот массив напрямую ...

for($i = 0; $i < count($bookseat); ++$i){
    $SQL_project_has_type = "INSERT INTO bookseat (seat, bid)
         VALUES({$bookseat[$i]}, $now)";
    mysqli_query($conn, $SQL_project_has_type);
}

И удалить ...

$bookseatarray = explode(',', $bookseat);

Вам также следует изучить использование подготовленных операторов и связывание переменных. Также вы смешиваете mysql_ и mysqli_. Так что исправил вызов в цикле.

Обновление:

Также заметил ...

if ($conn->query($sql) === TRUE) {

Похоже, что в вашем коде не выполняется SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...