Проблема PHP с запросом MySQL. Функция работает только для первого результата MySQL - PullRequest
0 голосов
/ 03 мая 2011

Я пытался найти что-то похожее в сети, но безрезультатно. То, что я пытаюсь сделать, это просто взять результаты из базы данных, а затем запустить некоторые функции для каждого результата. У нас есть два вида функций. Первая функция - это когда строка «Тип» = F, вторая - когда строка «Тип» = T. Проблема с этим кодом заключается в том, что он выполняет функции ТОЛЬКО для первого результата mySQL. Но в то же время у меня больше результатов, и функции должны запускаться для КАЖДОГО результата mySQL, а не только для первого.

Я не знаю, нужен ли мне foreach или еще что-нибудь. Я ничего не знаю о массивах и php-циклах.

Спасибо.

include_once("../dbconnection.php");
date_default_timezone_set('UTC');
$TimeZone ="UTC";
$todaydate = date('Y-m-d') ."\n";
$time_utc=mktime(date('G'),date('i'),date('s'));
$NowisTime=date('G:i:s',$time_utc);
$MembID =(int)$_COOKIE['Loggedin'];
$DB = new DBConfig();
$DB -> config();
$DB -> conn();
$queryMAIN="SELECT * FROM TableTuit WHERE TimeZone ='".$TimeZone."' AND Date ='".$todaydate."' ORDER BY ID ASC";
$result=mysql_query($queryMAIN) or die("Errore select TableT: ".mysql_error());
$tot=mysql_num_rows($result);

while($ris=mysql_fetch_array($result)){
    $text=$ris['Tuitting'];
    $account=$ris['IDAccount'];
    $memberID=$ris['memberID'];
    $type=$ris['Type'];
    $id=$ris['ID'];
    $time=$ris['Time'];

    if($time <= $NowisTime){
    if($type=="F") //if the row type is = F, then do the things below
    {
    $queryF ="SELECT * FROM `TableF` WHERE `memberID`='$MembID' AND `ID`='$account'";
    $result=mysql_query($queryF) or die("Errore select f: ".mysql_error());
    $count = mysql_num_rows($result); 
    if ($count > 0) {
    $row = mysql_fetch_assoc($result);
        DO FUNCTION // Should call the function that requires the above selected values from $queryF. Should Run this function for every mysql result given by $queryMAIN where row "type" is = F
        } 
} 
}

    if($type=="T") //if the row type is = T, then do the things below
    {
    $queryT = $queryF ="SELECT * FROM `TableT` WHERE `memberID`='$MembID' AND `ID`='$account'";
    $result=mysql_query($queryT) or die("Errore select $queryT: ".mysql_error());
    $count = mysql_num_rows($result); 
    if ($count == 0)
    $Isvalid = false;
    else
    {   
    $Isvalid = true;
    $row = mysql_fetch_assoc($result);

    }

    if($Isvalid){

    DO THIS FUNCTION // Should call the function that requires the above selected values from $queryT. Should Run this function for every mysql result given by $queryMAIN where row "type" is = T

    }
    }
}
}//END OF MYSQL WHILE OF $queryMAIN

Ответы [ 2 ]

2 голосов
/ 03 мая 2011

Вы используете $result для внешнего запроса ($result=mysql_query($queryMAIN); и запроса внутри цикла while $result=mysql_query($queryF); - я полагаю, вы не хотите смешивать их?

Прямо сейчас вы обрабатываете первую строку из TableTuit, а затем перезаписываете $result строкой из TableF или TableT. В следующем цикле следующие столбцы не будут найдены в массиве (если, конечно, они также не находятся в этих двух таблицах):

$text=$ris['Tuitting'];
$account=$ris['IDAccount'];
$memberID=$ris['memberID'];
$type=$ris['Type'];
$id=$ris['ID'];
$time=$ris['Time'];
1 голос
/ 03 мая 2011

Вы загружаете результаты в массив, попробуйте использовать это в цикле while:

while($ris=mysql_fetch_assoc($result)){
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...