Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 自定义where子句_Mysql_Propel - Fatal编程技术网

Mysql 自定义where子句

Mysql 自定义where子句,mysql,propel,Mysql,Propel,我正在尝试将md5ID与id匹配 SELECT * FROM `user` u WHERE MD5(`user_id`) = '66f041e16a60928b05a7e228a89c3799' 这是ID=58 我试过这样的东西。我知道我很接近我只是不知道我错过了什么 $criteria = new Criteria(); $criteria->addAnd('md5('.User::USER_ID.')', $_REQUEST['fs'], Criteria::CUSTOM); $us

我正在尝试将md5ID与id匹配

SELECT *
FROM `user` u
WHERE
MD5(`user_id`) = '66f041e16a60928b05a7e228a89c3799'
这是ID=58

我试过这样的东西。我知道我很接近我只是不知道我错过了什么

$criteria = new Criteria();
$criteria->addAnd('md5('.User::USER_ID.')', $_REQUEST['fs'], Criteria::CUSTOM);
$user = UserPeer::doSelectOne($criteria);

有什么想法吗?

首先,不推荐直接使用Criteria对象。你应该使用

使用这些类,您将能够编写如下内容:

UserQuery::create()
  ->where('md5(User.Password) = ?', $_REQUEST['fs'], PDO::PARAM_STR)                                                
  ->findOne();
您会注意到,我在查询中同时使用了表和列的PhpName


编辑:对于原始条件,必须指定参数类型。您将找到有关的详细信息。

首先,不推荐直接使用Criteria对象。你应该使用

使用这些类,您将能够编写如下内容:

UserQuery::create()
  ->where('md5(User.Password) = ?', $_REQUEST['fs'], PDO::PARAM_STR)                                                
  ->findOne();
您会注意到,我在查询中同时使用了表和列的PhpName


编辑:对于原始条件,必须指定参数类型。你会发现更多的信息。

经过漫长的测试和评估过程后,我成功地做到了这一点

$c = new Criteria();
$c->add(UserPeer::USER_ID, "md5(user.user_id) = \"".$_REQUEST['fs']."\"", Criteria::CUSTOM); // risk of SQL injection!!
$saved_search = UserPeer::doSelectOne($c);

出于某种原因,我认为$\u REQUEST['fs']是表的名称而不是值解决了问题。

经过漫长的测试和评估过程后,我成功地做到了这一点

$c = new Criteria();
$c->add(UserPeer::USER_ID, "md5(user.user_id) = \"".$_REQUEST['fs']."\"", Criteria::CUSTOM); // risk of SQL injection!!
$saved_search = UserPeer::doSelectOne($c);

出于某种原因,我认为$\u REQUEST['fs']是表的名称而不是值已解决问题。

未捕获异常“ProperteException”和消息“无法确定要绑定到子句“md5User.PASSWORD=”中参数的列?不再建议使用此选项,未弃用。带有消息“无法确定要绑定到子句“md5User.PASSWORD=”中参数的列”的未捕获异常“proplexception”?不再建议使用,也不弃用。为什么不将哈希值本地化为新的变量,然后将其传递给criteria对象?本地化:$userPassword=md5$_请求['fs'];然后传递给criteria对象:$c->addUserPeer::USER_PASSWORD,$userPassword,criteria::EQUALS;顺便说一下,如果这样做的话,您不必担心sql注入,因为将传递散列字符串,而不是要散列的实际值。因为密码是明文,我想比较MD5password字段。这只是一个例子,我不存储明文密码。同意,明文密码是一个坏主意。但您可以在发送到查询之前进行散列,以便与数据库中的散列进行比较。@MikePurcell我同意。密码示例是个坏主意。用户ID会更好-现在就改了。我还使用私钥,我将私钥与ID本身结合起来,以确保人们不能仅仅生成自己的md5摘要。无论如何,这解决了另一种方法为什么不起作用的问题。为什么不将散列值本地化为一个新的变量,然后将其传递给criteria对象?本地化:$userPassword=md5$_请求['fs'];然后传递给criteria对象:$c->addUserPeer::USER_PASSWORD,$userPassword,criteria::EQUALS;顺便说一下,如果这样做的话,您不必担心sql注入,因为将传递散列字符串,而不是要散列的实际值。因为密码是明文,我想比较MD5password字段。这只是一个例子,我不存储明文密码。同意,明文密码是一个坏主意。但您可以在发送到查询之前进行散列,以便与数据库中的散列进行比较。@MikePurcell我同意。密码示例是个坏主意。用户ID会更好-现在就改了。我还使用私钥,我将私钥与ID本身结合起来,以确保人们不能仅仅生成自己的md5摘要。无论如何,这解决了一个问题,即不确定为什么其他方法不起作用。