使用''时SQL语法出错

时间:2012-10-23 22:05:50

标签: php

  

可能重复:
  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('&lt;','&gt;');
    $input = str_replace($old, $new, $input);
    return $input;
    }

是,$ title和$ body是有效和有效的变量。

$body = $_POST['body'];
$title = $_POST['title'];

不确定这究竟是怎么做的,但这几乎就是我得到的。

2 个答案:

答案 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()会将<>转换为&lt;&gt;,执行的预设语句将转义'和{{ 1}} "

的字符