可能重复:
Why string with single quotes raises error when inserted in DB?
MySQL error when inserting data containing apostrophes (single quotes)?
每当我在textarea中放入单引号('')时,我总是会收到错误
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 'test'','1351029587','10/23/2012','0','0','1492815560','0')' at line 1
我已经插入了一个html删除功能:
$title = html_remove($title);
$body = html_remove($body);
function html_remove($input) {
$old = array('<','>');
$new = array('<','>');
$input = str_replace($old, $new, $input);
return $input;
}
是,$ title和$ body是有效和有效的变量。
$body = $_POST['body'];
$title = $_POST['title'];
不确定这究竟是怎么做的,但这几乎就是我得到的。
答案 0 :(得分:0)
您应该立即停止使用您的代码。它易受SQL注入攻击。此外,mysql_
函数正在deprecated。您应该使用带有mysqli_
或PDO
函数的绑定变量的预准备语句。
您可能希望查看将从字符串或strip_tags
中删除HTML和PHP标记的htmlentities
函数,以将所有适用的字符转换为HTML实体。 Read here了解差异和示例。
这是一个让你走上正确道路的例子:
<?php
$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 myTable (body, title) VALUES (?, ?)");
mysqli_stmt_bind_param($stmt, 'ss', $_POST[body], $_POST[title]);
/* execute prepared statement */
mysqli_stmt_execute($stmt);
printf("%d Row inserted.\n", mysqli_stmt_affected_rows($stmt));
/* close statement and connection */
mysqli_stmt_close($stmt);
/* close connection */
mysqli_close($link);
?>
答案 1 :(得分:0)
在预准备语句中使用以下变量:
$body=htmlentities($_POST['body']);
$title=htmlentities($_POST['title']);
htmlentities()
会将<
和>
转换为<
和>
,执行的预设语句将转义'
和{{ 1}} "