更新我的SQLi不起作用


Update MySQLi Not Working

我正在编写一个用户可以输入文件的网站,当他们单击删除时,我不想实际将其从我的数据库中删除。这是由于太复杂的原因,无法在堆栈溢出上解释。

无论如何,我没有让我的查询删除,而是让它更新。 我在 Ubuntu Desktop 12.04 上运行服务器。 当我运行以下代码时,我将查询var_dump到页面,以便我可以看到它。 然后,我将该查询复制并粘贴到phpMyAdmin中,它工作正常。

但是,当我只想让网站运行查询时,它不起作用。 有什么建议吗?

$id = $_GET['id'];
session_start();
$connect = mysqli_query('localhost', 'root', 'xxxxxxxxx', 'syllashare');
$query = "UPDATE `uploads` SET `deleted`='yes' WHERE `id`=$id";
echo var_dump($query);
$run = mysqli_query($connect, $query);
header('location: files.php');

您不与mysqli_query建立连接,请改用mysqli_connect

并且要注意SQL注入,使用预准备语句来防止这种情况。

$connect = mysqli_query('localhost', 'root', 'xxxxxxxxx', 'syllashare');

我想您在这里寻找的功能是 mysqli_connect() ,而不是mysqli_query()

另外。。。

$id = $_GET['id'];
$query = "UPDATE `uploads` SET `deleted`='yes' WHERE `id`=$id";

永远不要获取用户发送的内容并将其转储到 SQL 查询中。您正在使您的网站容易受到SQL注入的攻击。必须以某种方式处理所有用户输入。您可以使用预准备语句或mysqli_real_escape_string(),但由于我们正在处理我认为是一个数字,因此您应该使用 intval() 来过滤它。

此外,MySQLi支持OOP,这有助于使你的代码看起来更干净,可读和有意义,我建议你使用它。例如:

$mysqli = new mysqli('localhost', 'root', 'xxxxxxxxx', 'syllashare');
$query = $mysqli->prepare("UPDATE `uploads` SET `deleted` = 'yes' WHERE `id` = ?");
$query->bind_param('i', $_GET['id']);
$query->execute();