php - 在一个查询中对不同表进行多次插入

标签 php mysql

我正在尝试根据来自 1 个表单的信息将记录插入到 2 个不同的表中。但是我收到语法错误。不确定我做错了什么。

$query = "
    INSERT INTO
        " . DB_PFIX . "pages (
            title,
            url,
            content,
            parent,
            created_by,
            created_date,
            published
        ) VALUES (
            '" . $_POST["title"] . "',
            '" . $_POST["url"] . "',
            '" . $_POST["content"] . "',
            '" . $_POST["parent"] . "',
            '" . $user_id . "',
            '" . $time . "',
            '" . $_POST["published"] . "'
        );
    INSERT INTO
        " . DB_PFIX . "links (
            name,
            function
        ) VALUES (
            '" . $_POST["url"] . "',
            'pages'
        );
";

这是我收到的错误信息:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO links ( name, function ) VALUES ( '' at line 19

最佳答案

问题不在于多个表本身;问题是,默认情况下,PHP mysqli 接口(interface)不允许在单个语句字符串中包含多个语句。

使用 mysqli,可以启用一个选项来允许这样做。但请注意,此选项为一些讨厌的 SQL 注入(inject)打开了一扇大门。默认设置(每个语句字符串只允许一个 SQL 语句)不会阻止 SQL 注入(inject);但它确实关上了一大堆 SQL 注入(inject)肮脏的大门。)

无需重复文档,可在此处获取:

http://php.net/manual/en/mysqli.quickstart.multiple-statement.php http://php.net/manual/en/mysqli.quickstart.multiple-statement.php

启用该选项后,可以在单个语句字符串中提交多个 SQL 语句。

我会再次重复,启用多个语句确实打开了“Little Bobby Tables”式肮脏 ala 的大门

XKCD: Exploits of a Mom

(不清楚您使用的是 mysqli 还是 PDO,但鉴于此语句不包含绑定(bind)参数占位符,我敢说这不是准备好的语句,因此您可能使用的是 PDO 以外的接口(interface).)

关于php - 在一个查询中对不同表进行多次插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25046489/

相关文章:

php - 当我们从mysql数据库获取数据时出现错误如何正确

mysql - 可以在数据库中存储两次值吗?

php - 无法使用 AJAX 从 PHP 生成的 Bootstrap 选项卡中检索数据

php - 将类添加到此行... php/css

php - 无法加载 mysqli 扩展

php - 如何用php在两列中显示数据

mysql - 显示所有记录,即使为 NULL

mysql - 使用MySQL NDB集群实现负载均衡和HA

javascript - 我如何检查单元格是否有颜色并使用 javascript 获取它们在表格中的位置

javascript - ER_NOT_SUPPORTED_AUTH_MODE - MySQL 服务器