PHP将带有半音的textarea插入到MYSQL中

时间:2013-01-26 18:17:17

标签: php mysql

我正在php中创建一个具有标题和描述区域的表单。 当我提交表单并尝试将数据插入MYSQL时,我得到一个错误,似乎是由于标题中有分号。

  

您的SQL语法有错误;检查对应的手册   您的MySQL服务器版本,以便在'Club'附近使用正确的语法,   '设计和开发','1')'在第1行

查询

INSERT INTO Projects (ID, Title, Description, Status) 
        VALUES (0, 'Women's Club', 'Description of Project', '1')

我试图使用mysql_real_escape_string(),但我仍然得到这个错误。

我是否需要使用另一种方法来允许将分号插入mysql?

以下是我正在使用的一些代码。

$desc =  mysql_real_escape_string($_POST['desc']);

$q = "INSERT INTO Projects (ID, Title, Description, Status) 
           VALUES (0, '$title', '$desc', '1')";

感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

错误与您的$desc无关。取而代之的是$title

也添加此行:

$title = mysql_real_escape_string($title);

在插入查询之前。

单面注意:不要使用mysql_*功能。它们已被弃用。

答案 1 :(得分:1)

您应该使用绑定参数的mysqli_PDO。不推荐使用mysql_函数,并且您的代码容易受到SQL注入攻击。只需确保禁用魔法引号。

$link = mysqli_connect('localhost', 'my_user', 'my_password', 'world');

/* check connection */
if (!$link) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}
$stmt = mysqli_prepare($link, "INSERT INTO Projects (ID, Title, Description, Status)  VALUES (0, ?, ?, 1)");
mysqli_stmt_bind_param($stmt, 'ss', $title, $desc);

/* execute prepared statement */
mysqli_stmt_execute($stmt);

答案 2 :(得分:1)

你显然是在自己注射 。标题也需要转义。

您的代码非常不安全。不要使用mysql_*并且不要将您的查询保留为参数(他们需要进行消毒)!

$pdo = new PDO('mysql:host=localhost', $username, $password);
$stmt = $pdo->prepare("INSERT INTO Projects VALUES (null, ?, ?, 1)");
$stmt->execute($title, $desc);

如果启用了magic_quotes_gpc,请在POST标量值上使用stripslashes。这不会影响安全性,但如果你不这样做,你的行就会有额外的斜线。

答案 3 :(得分:-1)

你必须在特殊的mysql字符中添加斜杠。

http://php.net/manual/en/function.addslashes.php