PHP) mysqli_prepare не работает в операторе if - PullRequest
0 голосов
/ 11 июля 2020

Я пытаюсь создать приложение со словарем sh на английском языке. Reactjs и php используются в этом приложении, и в настоящее время у меня проблема с предотвращением инъекций SQL.

https://www.php.net/manual/en/mysqli.prepare.php в этой ссылке я обнаружил, что могу сделать

$conn = mysqli_connect('hostname','username','password','databasename');
if($stmt= mysqli_prepare($conn, SQL QUERY)){}

для создания подготовленного оператора мой код почти такой же, как в примере, но отличается SQL

<?php 
header('Access-Control-Allow-Origin: http://localhost:3000/');
$content = file_get_contents("php://input");
$contentJSON = json_decode($content);
$addEnglish = $contentJSON->english;
$addKorean = $contentJSON->korean;
$addSwedish = $contentJSON->swedish;
$addSynonyms = $contentJSON->synonyms;
$addExample = $contentJSON->example;
if (!preg_match('/[^A-Za-z]+/', $addEnglish)&&!preg_match('/\s/', $addEnglish))
{
include 'db/db_connection.php';
$conn = mysqli_connect('localhost','root','','worddb');

if(connectDB($conn)){
    if($mysqliPrepare=mysqli_prepare($conn,
        "CREATE TABLE IF NOT EXISTS WORDLIST(
            wordIndex INT(10) AUTO_INCREMENT,
            english VARCHAR(20),
            korean VARCHAR(20),
            swedish VARCHAR(20),
            synonyms TEXT,
            example VARCHAR(100),
            UNIQUE KEY wordDBIndex (wordIndex)
        );
        INSERT INTO WORDLIST (english, korean, swedish, synonyms, example)
        VALUES (?,?,?,?,?);"
    )){
        echo "prepared ".$mysqliPrepare;
        mysqli_smt_bind_param($mysqliPrepare,"s",$addEnglish,$addKorean,$addSwedish,$addSynonyms,$addExample);
        mysqli_smt_execute($mysqliPrepare);
        mysqli_stmt_bind_result($mysqliPrepare, $district);
        mysqli_stmt_fetch($mysqliPrepare);
        mysqli_stmt_close($mysqliPrepare);
    }
    print_r("</br>error ".mysqli_stmt_error($mysqliPrepare));
    print_r("</br>error ".mysqli_stmt_error($conn));
    print_r("</br>error ".$mysqliPrepare);
}
}else{
echo "search again";
}

функция connectDB взята из db_connection. php

<?php 
function connectDB($conn){
    $connectStatus = null;
    if (!$conn) {
        $connectStatus = false;
        die("Connection failed: " . $conn->connect_error);
    }else{
        echo "Connected successfully";
        $connectStatus = true;
    }
    return $connectStatus;
}
?>

Я пробовал запрос SQL в phpmyadmin, и он там работал, но в php скрипте кажется, что запрос SQL или функция mysqli_prepare работают с ошибками, потому что внутри оператора if просто никогда не запускается. То есть я не вижу сообщения «подготовлено», которое должен показать php. Таблица тоже не хочет создаваться.

Вот почему я сделал mysqli_stmt_error, чтобы узнать, какая у меня ошибка, но введите описание изображения здесь

Я получаю такие ошибки, поэтому я даже не могу получить сообщение об ошибке mysql .. похоже, что

if($mysqliPrepare=mysqli_prepare($conn,
    "CREATE TABLE IF NOT EXISTS WORDLIST(
        wordIndex INT(10) AUTO_INCREMENT,
        english VARCHAR(20),
        korean VARCHAR(20),
        swedish VARCHAR(20),
        synonyms TEXT,
        example VARCHAR(100),
        UNIQUE KEY wordDBIndex (wordIndex)
    );
    INSERT INTO WORDLIST (english, korean, swedish, synonyms, example)
    VALUES (?,?,?,?,?);"
))

проблема внутри этого кода, но я не вижу никаких проблем с этим, потому что тот же код SQL отлично работает в phpmyadmin. Я даже пробовал '?' вместо этого? но не работает.

1 Ответ

0 голосов
/ 11 июля 2020

Я не думаю, что вы можете объединить два запроса в одном операторе (create + insert). Попробуйте разделить их.

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