网站建设资讯

NEWS

网站建设资讯

php字符串查询数据库 php提供的字符串函数

如何自动转义字符串在PHP SQL查询

在处理MySQL和GET、POST的数据时,常常要对数据的引号进行转义操作。

创新互联公司成立与2013年,先为长岭等服务建站,长岭等地企业,进行企业商务咨询服务。为长岭企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

PHP中有三个设置可以实现自动对’(单引号),”(双引号),\(反斜线)和 NULL 字符转转。

php称之为魔术引号,这三项设置分别是

magic_quotes_gpc

影响到 HTTP 请求数据(GET,POST 和 COOKIE)。不能在运行时改变。在 PHP 中默认值为 on。

这个开启时,通过GET,POST,COOKIE传递的数据会自动被转义。

如 test.php?id=abc'de"f

echo $_GET['id']; # 会得到 abc\'de\"f

magic_quotes_gpc=On; 这个开启了,对写入数据库是没有影响的,比如 上面的$_GET['id'] 写到数据库里面,依然是 abc'de"f ,

相反,如果magic_quotes_gpc=Off; 那么字符中要带有引号(不管单引号还是双引号) ,直接写入mysql都会直接变成空白

但是,如果你将它写入文档,而非mysql。那么它将是 abc\'de\"f

magic_quotes_runtime

如果打开的话,大部份从外部来源取得数据并返回的函数,包括从数据库和文本文件,所返回的数据都会被反斜线转义。该选项可在运行的时改变,在 PHP 中的默认值为 off。

magic_quotes_sybase

如果打开的话,将会使用单引号对单引号进行转义而非反斜线。此选项会完全覆盖 magic_quotes_gpc。如果同时打开两个选项的话,单引号将会被转义成 ”。而双引号、反斜线 和 NULL 字符将不会进行转义。

我表单内容本来是:img alt=”" width=”400″ height=”300″ src=”/Upfiles/201105/images/1306657040.jpg” /

img alt=\”\” width=\”400\” height=\”300\” src=\”/Upfiles/201105/images/1306657040.jpg\” /

对策一:修改php.ini文件(修改php.ini这个方法就不说了,大家可以google下)

对策二:把转义的给取消了

第一步:找到你提交的数据比如$_POST['content'],将其改成$content=stripslashes($_POST['content']);

第二步:以后在使用$POST['content']的地方都换成$content

第三步:提交到数据库,数据库储存还是正常的:img alt=”" width=”400″ height=”300″ src=”/Upfiles/201105/images/1306657040.jpg” /读出来又成了

img alt=\”\” width=\”400\” height=\”300\” src=\”/Upfiles/201105/images/1306657040.jpg\” /(这个应该知道怎么解决了吧?要不我再罗嗦下吧)

第四步:将数据库读取的内容再用stripslashes()过滤一下。

stripslashes() 这个函数 ,删除由addslashes()函数添加的反斜杠。用于清理从数据库或 HTML 表单中取回的数据

PHP页面中如果不希望出现以下情况:

单引号被转义为 \'

双引号被转义为 \"

那么可以进行如下设置以防止:

在php.ini中设置:magic_quotes_gpc = Off)

总结如下:

1. 对于magic_quotes_gpc=on的情况,

我们可以不对输入和输出数据库的字符串数据作

addslashes()和stripslashes()的操作,数据也会正常显示。

如果此时你对输入的数据作了addslashes()处理,

那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。

2. 对于magic_quotes_gpc=off 的情况

必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出

因为addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行。

php处理post字符串进行mysql数据库查询

$users=mysqli_real_escape_string($link,$users);注释掉这行或修改$users=mysqli_real_escape_string($users);

php中的sql语句

1、很多时候我们在开发时需要将字符串与变量连接起来显示,在PHP中,字符串之间使用 “点” 来连接,也就是英文中的半角句号 " . " ,  " . " 是字符串连接符,可以把两个或两个以上的字符串链接成一个字符串。例如:

?php

$name = "百度知道:";

$url =  "zhidao.baidu";

echo $name.$url.".com";

?

输出结果为:

百度知道:zhidao.baidu.com

2、php在进行数据库查询时,如果对象是字符串,则需要使用引号将字符串区分开,这就是上面你的第一个问题,例如,你通过POST接受到的$username值是"zhanagsan",那么:

mysqli_query($conn,"SELECT * FROM user Where username = '".$username."'");

php在进行解析时就是

mysqli_query($conn,"SELECT * FROM user Where username = 'zhangsan'");

如果你觉得这样会让你有点看不过来,还可以这样写:

mysqli_query($conn,"SELECT * FROM user Where username = '{$username}'");

这里的{}也是起到连接的作用。

3、应用字符串连接符号有时候没有办法实现大量字符串的连接,PHP允许程序员在双引号中直接包含字符串变量,当echo语句后面使用的是 双引号 (" ")时,可以使用下面的格式来达到相同的效果(这是你的第二个问题)。例如:

?php

$name = "百度知道:";

$url =  "zhidao.baidu";

echo "$name$url.com"; // 双引号里的变量同一般的字符串自动进行区分

?

但是单引号(' ')就不可以了,这样如果不加连接符,解析后还是字符串,例如:

?php

$name = "百度知道:";

$url =  "zhidao.baidu";

echo '$name$url.com'; // 单引号里的变量不会同一般的字符串自动进行区分

?

最终的输出结果就变成了

$name$url.com   //最终只是输出变量名,是字符串

php字符串查找

PHP字符串查找的函数的函数比较多,这里演示下常用几种使用方法:

?php

//1.strstr()函数:用于获取一个指定字符串在另一个字符串中首次出现的位置开始,直到结束的子字符串,

//如果执行成功,则返回剩余字符串;否则返回false。

echo strstr("zhidao.baidu.com","baidu");  

//baidu.com

//2. strpos()函数:返回字符串在另一个字符串中第一次出现的位置。如果没有找到字符串,则返回false。

$str = 'hello,iambaiduzhidao!';

$find = 'zhidao';

if(strpos($str,$find)!==false){

echo '字符串包含:zhidao!';

}else{

echo '字符串不包含:zhidao!';

}

//输出结果:字符串包含:zhidao!

//返回字符串zhidao在str中第一次出现的位置

echo strpos($str,$find);

//14

?


网页题目:php字符串查询数据库 php提供的字符串函数
转载来源:http://njwzjz.com/article/ddogdjj.html