Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.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 查询不会从函数中运行_Php_Mysql_Pdo - Fatal编程技术网

Php 查询不会从函数中运行

Php 查询不会从函数中运行,php,mysql,pdo,Php,Mysql,Pdo,我正在尝试删除我的一个文件中的冗余。我有30到40个查询——两种不同类型——基于日期运行。我试图通过将两个不同的查询字符串放在一个函数中并根据日期调用该函数来避免重复相同的查询字符串。它似乎不像我期望的那样起作用。我是PHP新手,也许我忽略了什么或者不了解PHP函数是如何工作的 下面是代码示例: function queryONE() { $stmt = $pdo->query("SELECT `rand` FROM `setGallery` WHERE `$category`

我正在尝试删除我的一个文件中的冗余。我有30到40个查询——两种不同类型——基于日期运行。我试图通过将两个不同的查询字符串放在一个函数中并根据日期调用该函数来避免重复相同的查询字符串。它似乎不像我期望的那样起作用。我是PHP新手,也许我忽略了什么或者不了解PHP函数是如何工作的

下面是代码示例:

function queryONE() { 
    $stmt = $pdo->query("SELECT `rand` FROM `setGallery` WHERE `$category` = '$dayList' ORDER BY RAND() LIMIT $limit"); 
    $fh = fopen("galleryRand_PDO.txt", "w"); 
    while ($row = $stmt->fetchObject()) {
        fwrite($fh, $row->rand);
    } 

    fclose($fh); 

    exit();
}

function queryTWO() { 
    $stmt = $pdo->query("(SELECT `rand` FROM `jukebox2014` WHERE `$category` = '$dayList' ORDER BY RAND() LIMIT $limit) ORDER BY `rand` DESC"; 
    $fh = fopen("galleryRand_PDO.txt", "w"); 

    while ($row = $stmt->fetchObject()) {
        fwrite($fh, $row->rand);
    }

    fclose($fh); 

    exit(); 
}

if ($date == Jun 13)
{
    $category = "galleryDir"; 
    $dayList = "Grids";
    queryONE();
} 

if ($date == Nov 16) {
    $category = "class"; 
    $dayList = "Grids"; 
    queryTWO();
}
注:如果我放一个回音你好世界-在它确实显示的函数中的语句;因此if语句正在启动函数,但是函数没有运行查询,但是fopen代码确实创建了预期的文本文件

很明显,如果我不介意的话,还有很多。你知道为什么这行不通吗


谢谢。

尝试将日期作为参数传递给函数,如下所示:

function queryONE($category, $dayList) { 
    $stmt = $pdo->query("SELECT `rand` FROM `setGallery` WHERE `{$category}` = '{$dayList}' ORDER BY RAND() LIMIT $limit"); 
    $fh = fopen("galleryRand_PDO.txt", "w"); 
    while ($row = $stmt->fetchObject()) {
        fwrite($fh, $row->rand);
    } 

    fclose($fh); 

    exit();
}
然后调用该方法:

 if ($date == Jun 13)
{
    queryONE("galleryDir", "Grids");
} 

要将类别和日期列表传递到函数中:

queryONE("galleryDir", "Grids");
queryONE("class", "Grids");
并相应地定义功能:

function queryONE($category, $dayList) { 
    $stmt = $pdo->query("SELECT `rand` FROM `setGallery` WHERE `$category` = '$dayList' ORDER BY RAND() LIMIT $limit"); 
    $fh = fopen("galleryRand_PDO.txt", "w"); 
    while ($row = $stmt->fetchObject()) {
        fwrite($fh, $row->rand);
    } 

    fclose($fh); 

    exit();
}

function queryTWO($category, $dayList) { 
    $stmt = $pdo->query("(SELECT `rand` FROM `jukebox2014` WHERE `$category` = '$dayList' ORDER BY RAND() LIMIT $limit) ORDER BY `rand` DESC"; 
    $fh = fopen("galleryRand_PDO.txt", "w"); 

    while ($row = $stmt->fetchObject()) {
        fwrite($fh, $row->rand);
    }

    fclose($fh); 

    exit(); 
}

查询失败是因为变量没有数据。如果在执行查询之前回显查询内容,您将看到如下内容:

"(SELECT `rand` FROM `jukebox2014` WHERE `` = '' ORDER BY RAND() LIMIT ) ORDER BY `rand` DESC"
这是因为函数queryOne和queryTwo对这些变量一无所知;它们超出了范围

要使变量在这些函数的作用域中,需要将它们作为参数传递。首先,修改函数定义以接受参数:

function queryONE($category, $daylist, $limit) { ...
queryONE($category, $dayList, $limit);
queryTWO($category, $dayList, $limit);

然后修改调用函数以传递参数的行:

function queryONE($category, $daylist, $limit) { ...
queryONE($category, $dayList, $limit);
queryTWO($category, $dayList, $limit);
现在变量将可用于范围中的函数。您的代码不会显示您定义$limit的位置,但在调用新函数时,请确保它在范围内


最后,考虑打开。如果您允许,PHP解释器将警告您这些类型的事情。

请将代码格式化为适当的格式;请仔细阅读。您如何知道查询未运行?你到底是什么意思?结果集是否为空?并读取函数参数。我假设它是空的,因为文本文件没有任何输出。当我在函数外部运行任何一个查询时,都会填充文本文件,因此我知道查询代码正在工作。Category不会以这种方式进入函数。此外,在if中设置$dayList也没有意义。这也适用于$category。我想我已经实现了你的建议。但它们似乎不起作用。如果$today==11月15日{$category=images;$dayList=roses;$limit=1;queryONE$category,$dayList,$limit;}函数queryONE$category,$dayList,$limit{echo help!;$stmt=$pdo->querySELECT rand FROM setGallery,其中$category='$dayList'按rand LIMIT$LIMIT排序;$fh=fopengalleryRand_pdo.txt,w;而$row=$stmt->fetchObject{fwrite$fh,$row->rand;}fclose$fh;exit;}如果没有与函数相关的代码,它就可以工作。谢谢。我不知道为什么这个答案会投反对票,因为我怀疑所有答案都有一个,但这个答案1解释了问题2给出了一个解决方案,3显示了如何在将来防止它。+1。