Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.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
Php 如何在Yii2中调用类似SQL的函数?_Php_Yii2 - Fatal编程技术网

Php 如何在Yii2中调用类似SQL的函数?

Php 如何在Yii2中调用类似SQL的函数?,php,yii2,Php,Yii2,调用此SQL语句时接收NULL作为值(该记录存在于MySQL数据库中)。如何在Yii2中使用LIKE函数?谢谢 $command = $connection->createCommand("SELECT user_id FROM User WHERE name LIKE '%:_username%'"); $command->bindParam(':_username',$th

调用此SQL语句时接收NULL作为值(该记录存在于MySQL数据库中)。如何在Yii2中使用LIKE函数?谢谢

$command = $connection->createCommand("SELECT user_id
                         FROM User
                            WHERE name LIKE '%:_username%'");

$command->bindParam(':_username',$this->username);
$this->id_user = $command->queryScalar();
$command->execute();

我认为这里的问题在于
绑定

试试,用这个代替

$command->bindParam('_username',$this->username);

也不太确定变量的可接受语法是什么,因此,如果它仍然不起作用,请尝试删除
并在绑定时使用
username
。。。和
:查询中的用户名

我不确定,但请尝试获取单引号前的第一个%和单引号后的最后一个%

$command=$connection->createCommand(“选择用户标识 来自用户
其中名称(如%):_username“%”

需要对整个数据进行绑定,而不仅仅是其中的一部分

$command = $connection->createCommand("SELECT user_id
                     FROM User
                        WHERE name LIKE :username");

$user = '%' . $this->username . '%';

$command->bindParam(':username',$user);
$this->id_user = $command->queryScalar();
$command->execute();
只需在bindValue中包装
“%value%”

 $command = $connection->createCommand("SELECT user_id
                             FROM User
                                WHERE name LIKE ':_username'");

    $command->bindParam(':_username',"%".$this->username."%");
    $this->id_user = $command->queryScalar();
    $command->execute();
使用%%绑定值的正确方法如下

 $command->bindParam(':_username',"%".$this->username."%");

就像我们在Yii2中使用的PDO一样,您也可以这样使用activeQuery表示法

  $query = new Query;
  $query->select('userid')
      ->from('user')
      ->where(['like', 'user', $this->username );

  $command = $query->createCommand();

  $this->id_user = $command->queryScalar(); 

我正在使用bindValue。你可以这样用。。 我的模型中有一个查询,并调用控制器上的函数

内部模型:

$query = "SELECT u.id as idUser
FROM vagas_x_candidato vxc
INNER JOIN usuario u ON(u.id = vxc.id_candidato)
WHERE u.nome LIKE :nameUser";

$connection = \Yii::$app->db;
$model = $connection->createCommand($query);
$model->bindValue(":nameUser", '%' . $filter->nameU . '%');
return $model->queryAll();
内部控制器:

$vxc = new VagasXCandidatoSearch();
$vxc = $vxc->candidatosPesquisaAvancada(); //calls my method on model.

您是否考虑过使用而不是自己创建命令?这种类型的呼叫可能更灵活。它还有以不同方式处理的好处。在该语句之后,我有以下错误:PHP致命错误–yii\base\ErrorException无法通过引用传递参数2您可能需要首先将其转换为字符串:例如$user='%'$此->用户名'%'$命令->bindParam(':username',$user);它可以修改以下行:->where(['like','user','%.$this->username'%',false]);