【问题标题】:Concise way to check variable presence in MySQL INSERT QUERY using PHP使用 PHP 在 MySQL INSERT QUERY 中检查变量存在的简洁方法
【发布时间】:2009-08-26 23:04:17
【问题描述】:

我正在编写一个 PHP 脚本来将商品添加到购物篮。我的购物篮表有用户 ID、产品 ID、会话 ID、注释和其他一些字段。某些字段可以为空。例如:

如果有人没有登录,那么我会将他们的会话 ID 存储在表中,如果他们登录,则添加他们的用户 ID,这样我就有一种永久的方式将表中的项目与用户匹配。如果是,我将添加用户 ID。当涉及到 INSERT 查询时,我可以这样做:

$add_sql = "插入 sessionBasket (userid) VALUES ( '".isset($_SESSION["userid"]) ? $_SESSION["userid"] : "") ."'";

这会在变量检查和分支上为我节省很多时间,因为人们可以登录或不登录,项目可以有或没有注释,诸如此类。

【问题讨论】:

    标签: php mysql insert isset


    【解决方案1】:

    哎呀! SQL Injection! 你可能会丢失整个数据库

    您应该查看为您的 sql 插入准备好的语句。

    你需要使用mysqli接口,但它是这样的:

    $statement = $db_connection->prepare("insert into ... VALUES(?)");
    $statement->bind_param("id", $sid);
    $statement->execute();
    

    这将防止 sql 注入攻击。

    至少你应该转义字符串。

    $sid = isset($_SESSION[userid]) ? mysql_real_escape_string($_SESSION[userid])) : '';
    $add_sql = "insert into ... values($sid)";
    

    【讨论】:

    • 我知道,我知道 - 我只是给你一些与我的问题相关的基本信息,呵呵。我进行 JavaScript 模式匹配并在键入时替换任何非法字符,然后运行 ​​PHP 正则表达式,然后执行 mysqli_real_escape_string 并修剪每个输入,如果它们通过了,我只在完成 htmlspecialchars() 后插入。所以,当我告诉你不可能进行数据库注入时,请相信我 :)
    • 但是,实际上,你还是回答了我的问题:我将把作业作为一个单独的步骤来完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    相关资源
    最近更新 更多