[英]use one php file to process two mysql queries?
有没有一种方法,我可以使用相同的php文件'favorite.php'每次访问时执行两个单独的mysql查询。
基本上,我在用户个人资料页面上有一个链接,称为添加到收藏夹,该链接链接到favourite.php并运行查询以将用户添加到会话用户收藏夹列表中。 我想向文件中添加另一个查询以在单独的情况下运行,因此在下次单击链接以说表中是否存在收藏夹ID并将其删除时,将该链接从会话用户收藏夹列表中删除了吗?
在这里,我将查询插入,现在,我只需要找到一种说出删除收藏夹ID的方法(如果第二次单击该链接,则存在该ID?)。
<?php
require_once('includes/session.php');
require_once('includes/functions.php');
require('includes/_config/connection.php');
session_start();
confirm_logged_in();
if (isset ($_GET['to'])) {
$user_to_id = $_GET['to'];
}
if (!isset($_GET['to']))
exit('No user specified.');
$user_id = $_GET['to'];
$result = mysql_query("INSERT INTO ptb_favorites (user_id, favorite_id) VALUES (".$_SESSION['user_id'].", ".$user_to_id.")")
or die(mysql_error());
if($result = mysql_query($query))
$result = mysql_query("DELETE FROM ptb_favorites (user_id, favorite_id) VALUES (".$_SESSION['user_id'].", ".$user_to_id.")")
or die(mysql_error());
header("Location: profile.php?id=" . $user_to_id['user_id']);
?>
希望有道理的感谢。
假设您的PHP 5.3或更高版本,这就是我编写脚本以避免SQL注入的方式。 我倾向于对数据库查询使用闭包/匿名函数 ,但是您可以将它们与其他所有函数一起内联使用。
但是最后一行我很困惑,除非$_GET['to']
是一个数组。
<?php
require_once('includes/session.php');
require_once('includes/functions.php');
$connection = new PDO('mysql:host=example.com;dbname=you_database_name', 'mysql_username', 'mysql_pass');
session_start();
confirm_logged_in();
$user_to_id = isset($_GET['to']) ? $_GET['to'] : null;
if (is_null($user_to_id)) {
exit('No user specified.');
}
$user_id = $_GET['to'];
$insert = (function () use ($connection, $user_to_id) {
$sql = "INSERT INTO ptb_favorites (user_id, favorite_id) VALUES (?, ?)";
$statement = $connection->prepare($sql);
$result = $statement->execute(array(
$_SESSION['user_id'],
$user_to_id
));
return $result;
});
if ($insert() === true) {
$delete = (function () use ($connection, $user_to_id) {
$sql = "DELETE FROM ptb_favorites WHERE user_id = ? AND favorite_id = ?";
$statement = $connection->prepare($sql);
$result = $statement->execute(array(
$_SESSION['user_id'],
$user_to_id
));
return $result;
});
$delete();
}
// Not sure about this line if $user_to_id is not an array
header("Location: profile.php?id=" . $user_to_id['user_id']);
在构建DELETE
语句时,不应涉及VALUES
关键字,
DELETE
FROM ptb_favorites
WHERE user_id = val1 AND
favorite_id = val2
所以在PHP
$delQuery = " DELETE
FROM ptb_favorites
WHERE user_id = '" . $_SESSION['user_id'] . "' AND
favorite_id = '" . $user_to_id . "'"
$result = mysql_query($delQuery) or die(mysql_error());
附带说明,该查询容易受到SQL Injection
攻击。 请查看下面的文章,以了解如何防止它。 通过使用PreparedStatements,您可以摆脱在值周围使用单引号的麻烦。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.