Php 我的错误:您的SQL语法有错误;检查与MySQL服务器版本对应的手册
我在我的博客上发现了这个问题。当我在Php 我的错误:您的SQL语法有错误;检查与MySQL服务器版本对应的手册,php,mysql,mysqli,Php,Mysql,Mysqli,我在我的博客上发现了这个问题。当我在textik中使用单引号时,会出现此错误 插入clangky(nadpis,textik,datum,autor,kategorie)值(?,,,,,?) 您的SQL语法有错误;检查与MySQL服务器版本相对应的手册,以了解第2行“?,?,?,?,?)”附近使用的正确语法 我已经知道,由于SQL注入,您不能在字符串中使用单引号。所以我正在努力修复它。我尝试了这么多的教程,但没有任何帮助 <?php if (isset($_POST["btn"]
textik
中使用单引号时,会出现此错误
插入clangky
(nadpis
,textik
,datum
,autor
,kategorie
)值(?,,,,,?)您的SQL语法有错误;检查与MySQL服务器版本相对应的手册,以了解第2行“?,?,?,?,?)”附近使用的正确语法 我已经知道,由于SQL注入,您不能在字符串中使用单引号。所以我正在努力修复它。我尝试了这么多的教程,但没有任何帮助
<?php
if (isset($_POST["btn"])) {
$conn = new mysqli($servername, $username, $password, $dbname);
if($conn->connect_error){
die("ERROR: Could not connect. " . $conn->connect_error);
}
$nadpis = mysqli_real_escape_string($conn, $_POST['nadpis']);
$textik = mysqli_real_escape_string($conn, $_POST['textik']);
$datum = mysqli_real_escape_string($conn, $_POST['datum']);
$autor = mysqli_real_escape_string($conn, $_POST['autor']);
$kategorie = mysqli_real_escape_string($conn, $_POST['kategorie']);
$sql = "INSERT INTO `clanky` (`nadpis`, `textik`, `datum`, `autor`, `kategorie`)
VALUES (?, ?, ?, ?, ?);";
// '". $_POST['nadpis']."','". $_POST['textik']."','". $_POST['datum']."','". $_POST['autor']."','". $_POST['kategorie']."'
$stmt = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt, $sql)){
echo "SQL error";
} else {
mysqli_stmt_bind_param($stmt, "ssiss", $nadpis, $textik, $datum, $autor, $kategorie);
mysqli_stmt_execute($stmt);
}
if (mysqli_query($conn, $sql)) {
echo "New Record added";
header("Location: https://www.globalgraphicdesign.eu/welcome.php");
}else {
echo "Error" . $sql . "" . mysqli_error($conn);
}
$conn->close();
}
?>
我应该将您重定向到欢迎页面。使用此
$nadpis = addslashes(mysqli_real_escape_string($conn, $_POST['nadpis']));
$textik = addslashes(mysqli_real_escape_string($conn, $_POST['textik']));
$datum = addslashes(mysqli_real_escape_string($conn, $_POST['datum']));
$autor = addslashes(mysqli_real_escape_string($conn, $_POST['autor']));
$kategorie = addslashes(mysqli_real_escape_string($conn, $_POST['kategorie']));
您正在尝试准备它,并使用
query()
,因此尝试执行它两次。使用query()
时,它将失败,因为那里不允许使用占位符?
。在使用准备好的语句时,也不应转义输入。在调用header()
之前,也不应输出任何内容。您还可以使MySQLi抛出异常,这使得错误处理更加容易
您的整个代码段可以简化为以下内容
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
$conn = new mysqli($servername, $username, $password, $dbname);
if (isset($_POST["btn"])) {
$sql = "INSERT INTO `clanky` (`nadpis`, `textik`, `datum`, `autor`, `kategorie`)
VALUES (?, ?, ?, ?, ?);";
$stmt = $conn->prepare($sql);
$stmt->bind_param("sssss", $_POST['nadpis'], $_POST['textik'], $_POST['datum'], $_POST['autor'], $_POST['kategorie']);
$stmt->execute();
header("Location: https://www.globalgraphicdesign.eu/welcome.php");
$stmt->close();
exit;
}
} catch (Exception $e) {
echo "Something went wrong. Please try again later";
error_log($e->getMessage());
}
谢谢,但我需要博客中没有“斜杠”的文字,我已经试过了。然后使用斜杠(“谁是彼得·格里芬?”);当你展示它的时候。这太恶心了。OP正在使用,所以这种双重转义是无用的和有害的。非常感谢你的帮助,它正在工作:)上帝保佑你,我建议你避免手动错误报告。这是一个不同的问题,应该在别处定义。请检查在使用准备好的语句时不需要转义字符串。