等效于
这不是您想要的也不是必需的。
更改为
因为您正在使用POST变量。
这就是'VALUES ("test","test")';起作用的原因,而不是相反的原因,因为这两个变量$subject-$description都基于POST变量:
$subject = $_POST['subj'];
$description = $_POST['desc'];
你可以做
$sql ="INSERT INTO organiser (subject,description) VALUES ('$subject', '$description')";
如评论中所述。
要么
$sql ="INSERT INTO organiser (subject,description) VALUES ('".$subject."', '".$description."')";
将错误报告添加到文件顶部
error_reporting(E_ALL);
ini_set('display_errors', 1);
这可能表示您的代码中发现了错误。
http://php.net/manual/en/function.error-reporting.php
但是,您的方法可以进行SQL注入。将mysqli_*与预处理语句一起使用,或将PDO与预处理语句一起使用。
使用mysqli准备语句方法;更安全。
$DB_HOST ="xxx"; // replace with your own
$DB_NAME ="xxx";
$DB_USER ="xxx";
$DB_PASS ="xxx";
$conn = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($conn->connect_errno > 0) {
die('Connection failed [' . $conn->connect_error . ']');
}
// optional to check for empty fields
// if(isset($_POST['submit']) && !empty($_POST['subj']) && !empty($_POST['desc'])) {
if(isset($_POST['submit'])) {
$subject = stripslashes($_POST['subj']);
$description = stripslashes($_POST['desc']);
$stmt = $conn->prepare("INSERT INTO organiser (`subject`, `description`) VALUES (?, ?)");
$stmt->bind_param('ss', $subject, $description);
if (!$stmt->execute()) {
echo"Execute failed: (" . $stmt->errno .")" . $stmt->error;
}
else{
echo"Success!";
}
$stmt->close(); // Statement
$conn->close(); // MySQLi
}
?>
形式:(新)
Subject:
Description:
您的问题是因为您在$sql声明中使用了单引号,
$sql = 'INSERT INTO organiser '.'(subject,description) '.'VALUES ('$subject', '$description')';
当您使用单引号时,您是在告诉PHP您希望将引号中的所有内容按字面意义使用。
$age = 20;
$myAge = 'I am $age years';
echo $myAge;
因为您使用了单引号,所以这将回显I am $age years。
但是,如果您使用双引号代替,
$age = 20;
$myAge ="I am $age years";
echo $myAge;
输出将是
I am 20 years
因此,您的$ sql语句应为(我将其写在一行上),
$sql ="INSERT INTO organiser (subject,description) VALUES ('$subject', '$description')";
^ ^
如果您回显$ sql,它将变成类似的东西,
INSERT INTO organiser (subject,description) VALUES ('Your subject', 'Your description')
您在SQL语句中使用单引号是正确的,您可以在此处阅读有关此主题的更多信息:何时使用单引号,双引号和反引号
您忘记了变量周围的点,并且可以根据变量的内容在其周围添加一些双引号:)
'VALUES ("'.$subject.'","'.$description.'")';
或只是$sql ="INSERT INTO organiser (subject,description) VALUES ($subject, $description)";
非常正确,但是您必须向他解释一下用单引号/双引号引起来的区别:)