我正在编写一个用户可以输入文件的网站,当他们单击删除时,我不想实际将其从我的数据库中删除。这是由于太复杂的原因,无法在堆栈溢出上解释。
无论如何,我没有让我的查询删除,而是让它更新。 我在 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();