Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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 用其他语句替换SELECT语句_Php_Mysql_Symfony - Fatal编程技术网

Php 用其他语句替换SELECT语句

Php 用其他语句替换SELECT语句,php,mysql,symfony,Php,Mysql,Symfony,我有以下疑问: $sql = "SELECT u.id, u.login FROM AcmeBundle:Users u WHERE 1 = 1"; 在某些情况下,我想在SELECT子句中使用其他内容,例如: if($count == 1) { $sql = "SELECT COUNT(u.id) FROM AcmeBundle:Users u WHERE 1 = 1"; } 但是不需要再次

我有以下疑问:

$sql = "SELECT u.id, 
        u.login 
        FROM AcmeBundle:Users u
        WHERE 1 = 1";
在某些情况下,我想在SELECT子句中使用其他内容,例如:

if($count == 1)
{
   $sql = "SELECT COUNT(u.id)
           FROM AcmeBundle:Users u
           WHERE 1 = 1";
}
但是不需要再次编写整个查询…在这个if条件中,我只想替换前面定义的$sql变量中的SELECT子句的内容…我怎么做

比如:

if($count == 1)
{
   $sql = str_replace("SELECT ...", "COUNT(u.id)", $sql);
}
希望您是这个意思。

或者您可以使用语法并添加一个
$select
变量

$select = $count == 1 ? "COUNT(u.id)" : "u.id, u.login";
$sql = <<<SQL
    SELECT {$select}  
    FROM AcmeBundle:Users u 
    WHERE 1 = 1
SQL;
$select=$count==1?“计数(u.id)”:“u.id,u.login”;
$sql=您也可以使用。
大概是这样的:

$builder = $manager->createQueryBuilder()
        ->select('p')
        ->from('AcmeDemoBundle:Product', 'p');
$builder->select('COUNT(p)');
将导致
从AcmeDemoBundle中选择p:产品p如果现在重置
选择如下所示的

$builder = $manager->createQueryBuilder()
        ->select('p')
        ->from('AcmeDemoBundle:Product', 'p');
$builder->select('COUNT(p)');

它将导致以下查询:
从AcmeDemoBundle中选择计数(p):产品p

为什么要添加
,其中1=1
,这并不重要。这只是一个例子,我稍后会使用它来应用基于GET值的过滤器,这并不重要。理想情况下,我希望使用一些正则表达式来匹配SELECT和FROM之间的所有内容,然后替换它……可能吗?为什么要这样做?我看不出您需要为查询执行
str\u replace
的任何原因。但是您可以执行preg_replace(“/SELECT(.*)FROM/”,“SELECT other FROM”,$sql)