mysql_real_escape_string 什么时候会返回false



今天遇到一个奇葩的问题 ,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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值