【问题标题】:Multidimension array causing mysql error in PHP Insert queryPHP插入查询中使用mysql错误的多维数组
【发布时间】:2011-08-02 05:41:54
【问题描述】:
mysql_query("INSERT INTO data(timestamp,type,lift,sets,reps,weight) VALUES(".$time.",".$_POST[type][$i].",".$_POST[lift][$i].",".$_POST[sets][$i].",".$_POST[reps][$i].",".$_POST[weight][$i].")")or die(mysql_error());

我的代码如上。所有变量都设置好了。

我得到的错误是

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“Standing DB Hammer Curls,1,2,3)”附近使用正确的语法

这似乎没有任何理由。

谁能澄清一下这个问题,并在理想情况下解释为什么多维数组如此特殊,因为它们需要包含在它们之间等等。

干杯

【问题讨论】:

    标签: php mysql arrays insert multidimensional-array


    【解决方案1】:

    您是否在插入的变量周围添加了' 单引号?

    这会失败

    $t = "Test";
    mysql_query("INSERT INTO data(mystring) VALUES (" . $t . ")");
    

    这会起作用

    $t = "Test";
    mysql_query("INSERT INTO data(mystring) VALUES ('" . $t . "')");
    

    记得防御MySql Injection

    编辑:谢谢埃里克

    是的,您应该使用 mysql_real_escape_string() 之类的东西来转义可能在您的 POSTd 变量中的单引号。

    编辑:关于注入

    简而言之....因为如果将 ' 输入到表单中然后提交,则需要将字符串包装在 '(单引号)中,然后它可能会破坏插入或更新代码。

    如果在“O'Brien”表单中输入以下内容,那么 MySql 代码将是

    INSERT INTO data(mystring) VALUES ('O'Brien')
    

    这当然是不正确的,这样的东西可以被利用并用于进入网站。这被利用了world wide recently

    【讨论】:

    • 要添加到 Jake 的回复中,以防御 MySQL 注入,您需要转义您插入的数据中的任何引号。
    • 非常感谢。如果您能澄清为什么需要这样做,将不胜感激?干杯
    • Thomas,我已经编辑了更多信息,不过谷歌一下,那里有很多。
    • 我的荣幸。对 OP 的好回答。
    猜你喜欢
    • 2015-04-30
    • 2011-12-12
    • 2016-03-04
    • 2017-07-03
    • 2018-01-03
    • 2017-12-18
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    相关资源
    最近更新 更多