[英]Trying to insert data into a database using PHP / Mysqli
我正在尝试执行插入查询以将数据写入数据库。 我正在使用Mysqli和PHP。 该代码对我来说还可以。 但是,每次我访问该网页检查表单是否有效时,都会执行查询,并在数据库中创建一个新行(空)。
我很确定最后一个if语句出了点问题。 你能建议吗?
顺便说一句,该代码段仅适用于PHP执行sql查询,因为该表格可以正常工作。
谢谢!
$servername = "localhost";
$username = "root";
$password = "mysqlpassword";
$dbname = "bowieDB";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$album = $_POST['album'];
$relyear = $_POST['relyear'];
$label = $_POST['label'];
$chart = $_POST['chart'];
$track1 = $_POST['track1'];
$track2 = $_POST['track2'];
$track3 = $_POST['track3'];
$track4 = $_POST['track4'];
$track5 = $_POST['track5'];
$sql = "INSERT INTO Albums (album, relyear, label, chart, track1, track2, track3, track4, track5)
VALUES ('$album', '$relyear', '$label', '$chart', '$track1', '$track2', '$track3', '$track4', '$track5')";
$result = mysqli_query($conn, $sql);
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
您正在混合过程式和面向对象的SQL交互。
这是程序上的:
$result = mysqli_query($conn, $sql);
这是面向对象的:
$conn->query($sql)
您不能在相同的连接详细信息中使用这两者,您应该在整个代码中使用一个或另一个。 最好使用的是面向对象的方法,因此将过程代码重做为:
$result = $conn->query($sql);
if ($result) {
...
因此,实际上您可以简单地删除以$result = ...
开头的行$result = ...
并让IF语句查询您已经拥有的句柄。
使用MySQL错误反馈,例如在SQL语句之后检查if(!empty($conn->error)){print $conn->error;}
。 请参阅下面的示例代码...
也可以使用以下PHP错误反馈,将其设置在PHP页面的顶部:
...
error_reporting(E_ALL);
ini_set('display_errors',0);
ini_set('log_errors',1);
DROP
,则SQL注入会破坏数据库。 注释代码:
if ($_SERVER['REQUEST_METHOD'] == "POST") {
//run SQL query you already have coded and assume
// that the form has been filled in.
$result = $conn->query($sql);
if ($result) {
//all ok
}
if(!empty($conn->error)) {
print "SQL Error: ".$conn->error;
}
}
采用
1. if(isset($_POST['Submit'])){//your code here }
和
2. if($result){...
如果您使用程序方法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.