1

我用这个 MySQL 错误搜索过的其他人有限制词,但我看不到任何词。

我无法将 css div 存储在变量中并将其作为字段插入表中。

我很困惑,因为 2<br/>的工作很完美,但是当我尝试使用 div 时它会中断。

userrepost.php

    /* Connect and Query database "accounts", then close connection */
    $connection=mysql_connect("localhost","root","");
    if (!$connection)
    {
        die('Cannot connect to MySQL. Error: ' . mysql_error());
    }

    $check_database = mysql_select_db("accounts", $connection);
    if (!$check_database)
    {
        die('Cannot connect to database. Error: ' . mysql_error());
    }

    /* Escape all POST variables */
    $query=mysql_query("SELECT * FROM posts WHERE id='$_GET[postid]'");
    $result = mysql_fetch_row($query);
    $escaped_repostinfo=$_POST['repostinfo'];
    $final_repostinfo=$escaped_repostinfo."<br/><br/><div id='rptext'>".$result[0]." ".$result[1]."</div>";
    echo $final_repostinfo;
    $date = new DateTime('Canada/Saskatchewan');
    $date->setTimezone(new DateTimeZone('Canada/Saskatchewan'));
    $date_string=$date->format('d/m/Y H:i:s');

    /* Query database to save user's post */
    /* If field "repostid==0", then the post is not a repost; if the field "repostid>0", then the post is a repost with the field "repostid" linking to the id of the post to be reposted */ 
    $result = mysql_query("INSERT INTO posts (user, content, repostid, date) VALUES ('$_SESSION[username]', '$final_repostinfo', '$_GET[postid]', '$date_string')");
    if (!$result)
    {
        die('Cannot query. Error: ' . mysql_error());
    }

    /* Close Connection */
    mysql_close($connection);

'rptext' 是一个 CSS div(#rptext{stuff;})

这是错误:

Cannot query. Error: 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 'rptext'>shawn619 dfsd', '51', '09/11/2013 15:27:11')' at line 1
4

3 回答 3

0

您正在插入一个包含单引号的未转义字符串:

'rptext'

这需要正确转义才能工作。

于 2013-11-09T21:45:35.487 回答
0

使用 .转义您放入查询的所有变量mysql_real_escape_string。每个变量。我 99% 确定这是导致您的错误的原因,而且:$_GET变量直接传递到 SQL 查询中是非常危险的。对于您忘记的每个变量,您都会为这些类型的错误和SQL 注入攻击留下一个漏洞。

就这么简单:

$var = $_GET['some-parameter'];
$var = mysql_real_escape_string($var); // now you may use it in a query

编辑:只是为了澄清一下,您不仅需要转义$_GET变量,还需要转义所有变量!不要忘记$final_repostinfo$date_string

于 2013-11-09T21:46:04.490 回答
0
$query=mysql_query("SELECT * FROM posts WHERE id='$_GET[postid]'");

$_GET[postid] 不像 $_GET['postid'],差别很大

请使用这种方式:

$query=mysql_query("SELECT * FROM posts WHERE id=`".$_GET[postid]."`");

$_GET['postid'] 是数字还是字符串?如果是数字,则不需要使用撇号。

同样的问题:

$result = mysql_query("INSERT INTO posts (user, content, repostid, date) VALUES ('$_SESSION[username]', '$final_repostinfo', '$_GET[postid]', '$date_string')");

$_SESSION 和 $_GET...

于 2013-11-09T21:52:33.117 回答