我正在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')";
感谢您的帮助。
答案 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字符中添加斜杠。