Я пытаюсь создать приложение со словарем 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. Я даже пробовал '?' вместо этого? но не работает.