Php Yii2 mysql\u real\u escape\u字符串

Php Yii2 mysql\u real\u escape\u字符串,php,yii2,Php,Yii2,以下是我的代码: <?php $sql2 = "Select * from table "; for($i=0;$i<count($val);$i++){ $sql2.=" where(column1 LIKE '%".$val[$i]."%' OR " . "column2 LIKE '%".$val[$i]."%' OR " . "column3 LIKE '%".$val[$i]."%' OR " . "column4 LIKE '%".$val[$i]

以下是我的代码:

<?php
$sql2 = "Select * from table ";
for($i=0;$i<count($val);$i++){
$sql2.=" where(column1 LIKE '%".$val[$i]."%' OR "
    . "column2 LIKE '%".$val[$i]."%' OR "
    . "column3 LIKE '%".$val[$i]."%' OR "
    . "column4 LIKE '%".$val[$i]."%' OR "
    . "column5 LIKE '%".$val[$i]."%' OR "
    . "column6 LIKE '%".$val[$i]."%' OR "
    . "column7 LIKE '%".$val[$i]."%') ";
}

您可以使用yii2中的
Query
执行以下操作。并且您必须在标题中添加Query

use yii\db\Query;

$query = new Query;
$query->select('*')
      ->from('table')
      ->where(['=','status',$status]);
for($i=0;$i<count($val);$i++){
      $query->orWhere(['like',column1,$val[$i]]);
}
    $command = $query->createCommand();
使用yii\db\Query;
$query=新查询;
$query->select(“*”)
->from('表')
->其中(['=','status',$status]);
对于($i=0;$i,其中(['like',column1,$val[$i]]);
}
$command=$query->createCommand();

您可以使用yii2中的
Query
执行以下操作。您必须在标题中添加Query

use yii\db\Query;

$query = new Query;
$query->select('*')
      ->from('table')
      ->where(['=','status',$status]);
for($i=0;$i<count($val);$i++){
      $query->orWhere(['like',column1,$val[$i]]);
}
    $command = $query->createCommand();
使用yii\db\Query;
$query=新查询;
$query->select(“*”)
->from('表')
->其中(['=','status',$status]);
对于($i=0;$i,其中(['like',column1,$val[$i]]);
}
$command=$query->createCommand();

首先,mysql\uuz扩展已被弃用,我不使用它。 您需要转义查询参数

解决方案,基于您的问题:

$query = new \yii\db\Query();
$query
    ->from('table')
    ->andFilterWhere([
        'OR',
        ['LIKE', 'column1', $val[0]],
        ['LIKE', 'column2', $val[1]],
        ['LIKE', 'column3', $val[2]],
        ['LIKE', 'column4', $val[3]],
        ['LIKE', 'column5', $val[4]],
        ['LIKE', 'column6', $val[5]],
        ['LIKE', 'column7', $val[6]]
    ]);
我想你需要这个:

$val = range(1,10);
$query = new \yii\db\Query();
$query->from('table');
foreach ($val as $v) {
    $query
        ->orFilterWhere([
            'OR',
            ['LIKE', 'column1', $v],
            ['LIKE', 'column2', $v],
            ['LIKE', 'column3', $v],
            ['LIKE', 'column4', $v],
            ['LIKE', 'column5', $v],
            ['LIKE', 'column6', $v],
            ['LIKE', 'column7', $v],
        ]);
}
其他信息:

$cc = $query->createCommand();
// debug query
var_dump($cc->rawSql); // returns SQL query with the substituted parameters
var_dump($cc->sql); // returns SQL query with placeholders 
var_dump($cc->params); // returns the placeholders 
// run query
var_dump($cc->queryAll());

首先,mysql\uuu扩展已被弃用,Yii不使用它。 您需要转义查询参数

解决方案,基于您的问题:

$query = new \yii\db\Query();
$query
    ->from('table')
    ->andFilterWhere([
        'OR',
        ['LIKE', 'column1', $val[0]],
        ['LIKE', 'column2', $val[1]],
        ['LIKE', 'column3', $val[2]],
        ['LIKE', 'column4', $val[3]],
        ['LIKE', 'column5', $val[4]],
        ['LIKE', 'column6', $val[5]],
        ['LIKE', 'column7', $val[6]]
    ]);
我想你需要这个:

$val = range(1,10);
$query = new \yii\db\Query();
$query->from('table');
foreach ($val as $v) {
    $query
        ->orFilterWhere([
            'OR',
            ['LIKE', 'column1', $v],
            ['LIKE', 'column2', $v],
            ['LIKE', 'column3', $v],
            ['LIKE', 'column4', $v],
            ['LIKE', 'column5', $v],
            ['LIKE', 'column6', $v],
            ['LIKE', 'column7', $v],
        ]);
}
其他信息:

$cc = $query->createCommand();
// debug query
var_dump($cc->rawSql); // returns SQL query with the substituted parameters
var_dump($cc->sql); // returns SQL query with placeholders 
var_dump($cc->params); // returns the placeholders 
// run query
var_dump($cc->queryAll());

“现在如何在这里添加mysql\u real\u escape\u string?”-A:不要。使用一个准备好的语句,你可能会为此感谢我;-)尝试类似于
-where(“column1-like CONCAT('%,:val'%),[':val'=>$val[$i]])
@Barmar我明白你的意思,但如何用它创建sql字符串?我不知道,我不使用Yii2。“现在如何在这里添加mysql_real_escape_string?”-A:不要。使用一个准备好的语句,您可能会为此感谢我;-)尝试类似于
-where(“column1-like CONCAT('%,:val'%)”,[':val'=>$val[$i]]的内容
@Barmar我明白你的意思,但是如何用它创建sql字符串呢?我不知道,我不使用Yii2。希望这能帮助你希望这能帮助你