mysql_real_escape_string 什么时候会返回false

来源:互联网 发布:日本动漫配音软件 编辑:程序博客网 时间:2024/05/03 13:57



今天遇到一个奇葩的问题 ,mysql_real_escape_string返回false;


 $vvv['singer_name'] = '2PM'; //2PM 是接口的数据
$singer_name = mysql_real_escape_string($vvv['singer_name']);
echo $singer_name; //输出false 

此上直接运行则没事儿,2PM是接口数据,所以才有问题;


 换成mysql_escape_string 则没事儿

难道是编码问题?


百度谷歌、查手册都没找到答案,然后看了一下PHP源码

PHP_FUNCTION(mysql_real_escape_string){zval *mysql_link = NULL;char *str;char *new_str;int id = -1, str_len, new_str_len;php_mysql_conn *mysql;if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|r", &str, &str_len, &mysql_link) == FAILURE) {return;}if (ZEND_NUM_ARGS() == 1) {id = php_mysql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);CHECK_LINK(id);}ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, &mysql_link, id, "MySQL-Link", le_link, le_plink);new_str = safe_emalloc(str_len, 2, 1);new_str_len = mysql_real_escape_string(mysql->conn, new_str, str, str_len);new_str = erealloc(new_str, new_str_len + 1);RETURN_STRINGL(new_str, new_str_len, 0);}



后来问师傅得知,第二个参数是数据库连接句柄,问起学习方法,是查的英文手册,我这才知道中英文手册内容是不一样的。



但是还有一个疑问,为何我本来测试没有返回fasle呢,就一个php页面,也没有连接数据库,原因在于mysql_connect() 默认连接成功即可;


然后测试确实是,开发机上mysql_connect不能成功,我的本地就能成功,而mysql_connect默认连接成功与否由php.ini配置。




0 0