Php 在MySQL查询中使用函数
我有以下代码行:Php 在MySQL查询中使用函数,php,mysql,function,md5,Php,Mysql,Function,Md5,我有以下代码行: mysql_query("SELECT name FROM details WHERE md5(name) = '".md5($input_name)."'"); 但是,当我将查询更改为以下内容时,此查询工作正常: mysql_query("SELECT name FROM details WHERE salt(name) = '".salt($input_name)."'"); 这个查询似乎不起作用 盐的作用如下: function salt ($name) { gl
mysql_query("SELECT name FROM details WHERE md5(name) = '".md5($input_name)."'");
但是,当我将查询更改为以下内容时,此查询工作正常:
mysql_query("SELECT name FROM details WHERE salt(name) = '".salt($input_name)."'");
这个查询似乎不起作用
盐的作用如下:
function salt ($name) {
global $salt;
return $salt.$name;
}
其中$salt是一个全局变量(md5散列)
为什么第二个查询不起作用?MySQL无法访问您在PHP中定义的函数。您只能使用MySQL在MySQL查询中定义的函数,或使用SQL编写的函数。您必须重新考虑您正在做什么,并以一种不需要MySQL使用PHP函数的方式来表达它 PHP中的函数和MySQL中的函数是两个不同的东西
在发送MySQL查询时,MySQL将负责解析您发送的字符串。MySQL不知道您编写的任何PHP代码,反之亦然。这不是很容易做到的:
$saltinput = salt($input_name)
mysql_query("SELECT name FROM details WHERE salt(name) = '$salitinput'");
我不认为salt是一个MySQL函数,你不是想做一个SHA,然后将salt添加到字符串中吗?是的,salt()是我自己定义的一个函数-如问题中所述,你创建了一个PHP函数而不是MySQL函数。另外,您不是在尝试将列与值匹配吗?它不应该是“WHERE name=”。salt($input_name)。“”“
WHERE MD5()=MD5()
实际上毫无意义。让我猜猜,您刚刚学习了哈希和盐析,并试图将其追溯添加到您的系统中?那么你就完全错了。然后转义你的值或使用准备好的语句,这是处理SQL注入的常用方法。为每个查询对整个数据库进行哈希运算是非常浪费的。谢谢您的回复。但是md5()不是一个PHP函数吗?我们是如何正确使用它的?MD5()
也恰好是MySQL中定义的一个函数。正如deceze所提到的,不能从MySQL中调用salt(name),因为我使用PHP定义了它