Почему создание таблицы, а затем вставка нескольких значений возвращает ошибку? - PullRequest
0 голосов
/ 24 октября 2018

Итак, я пытаюсь создать таблицу и затем вставить в нее несколько значений, например:

        $servername = "localhost";
        $username = "root";
        $password = "";
        $dbname = "someDbName";
        $conn = mysqli_connect($servername, $username, $password, $dbname);
                if (!$conn) {
                    die("Connection failed: " . mysqli_connect_error());
                }
                    $sql = "CREATE TABLE IF NOT EXISTS someTableName(
                    someID INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
                    someVar1 VARCHAR(30) NOT NULL,
                    someVar2 INT NOT NULL);
                    INSERT INTO someTableName (someVar1 , someVar2 ) VALUES ('someString1', someInteger1),
                    ('someString2',someInteger2);";

Где биты someInteger, конечно, являются целыми числами.А затем:

            $sql = mysqli_real_escape_string($conn, $sql);    
            if (mysqli_multi_query($conn, $sql)) {
                dtconsole("Tables populated successfully");
            } else {
                dtconsole("Error creating table: " . mysqli_error($conn));
            }

С помощью функции dtconsole выведите данные на консоль, чтобы помочь мне в отладке.

function dtconsole($data){
        $output=$data;
        if(is_array($output)){
            $output=implode(',',$output);
        }
        echo '<script>console.log("'.$output.'");</script>';
    } 

Каждый раз, когда я пытаюсь выполнить это, он возвращает следующую ошибку:

Ошибка создания таблицы: в синтаксисе SQL есть ошибка;проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с 'someID INT (6) UNSIGNED AUTO_INCREMENT PRIMARY KEY', в строке 1

А я не могу на всю жизнья вижу, что я делаю не так.

1 Ответ

0 голосов
/ 24 октября 2018

Ваша проблема в том, что вы вызываете mysqli_real_escape_string для всего запроса, а не только для значений, которые вы вставляете.В результате он преобразует CR-LF в вашей строке $ sql в \r\n, что синтаксический анализатор MySQL не может интерпретировать.Вы должны делать что-то вроде этого:

$someString1 = mysqli_real_escape_string($conn, 'someString1'); 
$someString2 = mysqli_real_escape_string($conn, 'someString2');
$sql = "CREATE TABLE IF NOT EXISTS someTableName(
        someID INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
        someVar1 VARCHAR(30) NOT NULL,
        someVar2 INT NOT NULL);
        INSERT INTO someTableName (someVar1 , someVar2 ) VALUES ($someString1, someInteger1),
        ($someString2,someInteger2);";
if (mysqli_multi_query($conn, $sql)) { 
    ...
...