MySQL语法错误附近

时间:2013-11-09 21:41:57

标签: php mysql

我用谷歌搜索这个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

3 个答案:

答案 0 :(得分:0)

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

'rptext'

这需要适当地转义才能发挥作用。

答案 1 :(得分:0)

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

这很容易:

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

编辑:只是为了澄清,你不只是需要转义$_GET个变量,但所有这些变量!不要忘记$final_repostinfo$date_string

答案 2 :(得分: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 ......