我的数据库使用ampps服务器。使用php,我已经编写了与服务器数据库连接的脚本。现在我想在数据库表中插入数据。
我试着写这个脚本,结果新行被插入了空值。
我尝试了多个插入查询,但没有成功。
<?php
require("testDB.php");
class insertUserHelper
{
private $name;
private $email;
private $status;
function insertUserHelper($name,$email,$status)
{
$this -> name = $name;
$this -> email = $email;
$this -> status = $status;
}
function insert()
{
$con = testDatabase::getDB();
echo $name;
echo $email;
echo $status;
$sql = "INSERT INTO user ". "(name,email,status) ".
"VALUES ". "('$name','$email','$status')";
if (mysqli_query($con, $sql)) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($con);
}
}
}
?>
有人能帮忙吗,php新手。非常感谢。
如果要在insert()函数中创建局部变量$name, $email and $status
,请尝试使用$this->name, $this->email and $this->status
。并使用带有绑定变量的已准备好的语句,而不是像那样构建易受攻击的查询。
尝试这个
$sql = "INSERT INTO user (name,email,status) VALUES ('$name','$email','$status')";
请更换
$sql = "INSERT INTO user ". "(name,email,status) ".
"VALUES ". "('$name','$email','$status')";
带有
$sql = "INSERT INTO user ". "(name,email,status) ".
"VALUES ". "('$this->name','$this->email','$this->status')";
- 使用bind_param执行查询
- 使用
$this->name
、$this->email
、$this->status
而不是$name
、$email
、$status
更新代码
function insert()
{
$con = testDatabase::getDB();
$stmt = mysqli_prepare($con, "INSERT INTO user (name,email,status) VALUES (?, ?, ?)");
mysqli_stmt_bind_param($stmt, 'sssd', $this->name, $this->email, $this->status);
if (mysqli_stmt_execute($stmt)) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($con);
}
}
有关详细信息,请单击mysqli_stmt::bind_param
解释
$stmt->bind_param("ss"、$firstname、$lastname、$email);
sss
参数列出了参数所属的数据类型。s
字符告诉mysql参数是一个字符串。
自变量可以是四种类型之一:
- i-整数
- d-双
- s-字符串
- b-BLOB
每个参数都必须有一个。通过告诉mysql预期的数据类型,我们可以最大限度地降低SQL注入的风险。
有关更多信息,请单击Prepared Statements