“mysqli_real_escape_string”正在运行但是控件没有进入第二个if块

时间:2011-11-11 17:21:40

标签: php

我从php网站(http://php.net/manual/en/mysqli.real-escape-string.php)中选择了以下程序,然后在运行wamp服务器的系统上运行。 我发现逃避字符会被添加但是控件不会进入第二个if block

以下是代码:

<?php
$link = mysqli_connect("localhost", "admin", "admin", "sampdb");

/* check connection */
if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
            exit();
}

mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City");

$city = "'s Hertogenbosch";

/* this query will fail, cause we didn't escape $city */
if (!mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
        printf("Error: %s\n", mysqli_sqlstate($link));
}

 $city = mysqli_real_escape_string($link, $city);
print $city;

/* this query with escaped $city will work */
if (mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
        printf("%d Row inserted.\n", mysqli_affected_rows($link));
}

mysqli_close($link);
?>

O / P:

错误:42000

\'s \ Hertogenbosch

根据链接中提到的示例:“http://php.net/manual/en/mysqli.real-escape-string.php”控件应进入第二个if块并打印插入的行数。在这种情况下没有发生。

4 个答案:

答案 0 :(得分:1)

转义字符由mysqli_real_escape_string函数添加,这就是它的目的。转义意味着在控制字符(如撇号(')之前)放置转义字符(在SQL中,它是反斜杠)。

答案 1 :(得分:1)

您获得的错误来自第一次查询运行。尝试评论第一个块,看看它是否顺利运行。它应该运行。

答案 2 :(得分:0)

mysqli_real_escape_string的意思是在不安全字符之前添加反斜杠。所以它会变成'',“变成\”等...这样做是为了让你的SQL字符串对数据库安全。

答案 3 :(得分:0)

mysqli_real_escape_string()与删除不需要的字符无关。它返回字符串,其中每个字符具有特殊含义(在您的情况下为撇号)前缀为反斜杠(转义字符)。

通过转义,您可以将这些特殊字符插入数据库的文本字段中。要引用该页面,前缀字符为:NUL(ASCII 0),\n\r\'"Control-Z