嘿,我是一个PHP新手,在这里设置了“fetch,post to db,allow delete”项目,我已经获取了数据,打印了数据库行,现在我正在添加删除每一行的功能{ {1}}但我遇到了这个错误。
我在第81行突出显示了astricks以及上下两个注释块,因此您可以轻松找到它。
感谢您帮助我学习。
'$id'
答案 0 :(得分:5)
你的问题出在这一行(有错误的那一行)
$id = mysql_real_escape_string($connection, $_POST['id']);
而应该是
$id = mysqli_real_escape_string($connection, $_POST['id']);
您主要以mysqli_
函数处理事物(这是更好的方法),但在这种情况下,您使用mysql_
连接进行转义。 不要使用它,它已被弃用,并且很快将不再起作用,因为它易受SQL注入攻击每种语法都有所不同。您已正确设置订单,但输入错误(因为其他所有内容都使用mysqli
。此外请勿使用魔术引号!危险且已弃用
请注意,有更好的方法来处理查询,如果您使用预准备语句,则根本不需要转义它(也不需要担心您的变量是否需要引用)。这些都是安全的(有些人会这么说,所以你不需要记住来逃避所有变量),并且有更大的查询速度更快的优势。
例如,见下文。以下是使用delete语句的示例:
首先使用面向对象的样式连接到数据库,如下所示:
$connection = new mysqli("localhost", "user", "password", "database");
(请注意,最好将数据库变量存储在单独的脚本中,然后将其称为require_once
include)
然后,像这样处理您的查询
$sql = $connection->prepare("DELETE FROM joke WHERE id=?");
$sql->bind_param("i", $id);
$sql->execute();
$sql->close();
请注意"i"
指定这是一个整数(大多数是ids),但是如果这个变量是一个字符串,你可以调用它指定为"s"
有关mysqli
预先准备好的陈述的更多信息,请查看此处:mysqli prepared statements
答案 1 :(得分:0)
您正在使用mysqli查询数据库,因此您需要使用mysqli_real_escape_string()
而不是mysql_real_escape_string()
,并删除已传递给函数$connection
的第一个参数。这是每个开发人员犯下的一个非常常见的错误。
因此您可以用
替换第81行$id = mysqli_real_escape_string($_POST['id']);
答案 2 :(得分:0)
include("includes/db.php");
if(isset($_POST['login'])){
$email = mysqli_real_escape_string($con, $_POST['email']);
$pass = mysqli_real_escape_string($con, $_POST['password']);
它对我有用.... eloisa ..非常感谢你。
答案 3 :(得分:-1)
变化:
if (!ini_get("safe_mode")) $success = mail($to, $subject, $message, $headers, $params);
为:
if (!ini_get("safe_mode")) $success = @mail($to, $subject, $message, $headers, $params);
像魔术一样工作..只需更改你的邮件($改为......而其余的改为 如上所述)