繁体   English   中英

用一个PHP文件来处理两个MySQL查询?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM