2012-03-04 111 views
1

我有这个PHP代码,我相应地验证和提取查询..但虽然我的查询正在触发,但它以空白屏幕结束。我用die()评论了该位置;PHP代码以空白屏幕结束

for ($z = 0; $z < count($track); $z++) { 
    if (in_array($track[$z], $already_track)) { 
     $at_key = array_search($track[$z], $already_track); 
     $a = explode(":", $artist[$z]); 
     $b = explode(":", $already_artist[$at_key]); 
     $array_compared = array_diff($a, $b); 

     if (empty($array_compared)) { 
      continue; 
     } else { 
      $sql = mysql_query("INSERT INTO tracklist(aid, sid, rid, added_by, added_on) VALUES('".$album."', '".$track[$z]."', '".$artist[$z]."', '".$_SESSION["userkey"]."', '" . $time . "')") or die(mysql_error()); 
      //die("Yes Here"); //My code output blank screen after this query. Though query fired successully. 
     } 
    } else { 
     $sql = mysql_query("INSERT INTO tracklist(aid, sid, rid, added_by, added_on) VALUES('".$album."', '".$track[$z]."', '".$artist[$z]."', '".$_SESSION["userkey"]."', '" . $time . "')") or die(mysql_error()); 
    } 
} 
+0

“空白屏幕”可能表明您的PHP配置为将错误输出到错误日志而不是浏览器。错误日志说什么? – imm 2012-03-04 20:06:32

回答

1

首先,我会设置这条线在脚本的顶部,以使所有的错误:

error_reporting(-1); 

然后,我会在屏幕上打印一些东西,看看你的脚本是在“if”还是在“false”(else)的“真实”部分。

最后,我会在屏幕上转储您放入SELECT语句中的所有变量。你的变量不会被转义,所以它可能是你有错误的原因。输出SQL语句并直接在MySQL中运行它也会告诉你该错误是否来自该部分。

数据中的任何引号(单或双)可能会影响您的SQL。

编辑的代码将是:

for ($z = 0; $z < count($track); $z++) { 
     if (in_array($track[$z], $already_track)){ 
      $at_key = array_search($track[$z], $already_track); 
      $a = explode(":", $artist[$z]); 
      $b = explode(":", $already_artist[$at_key]); 
      $array_compared = array_diff($a, $b); 
      if(empty($array_compared)){ 
       continue; 
      } else { 
       $sql = "INSERT INTO tracklist(aid, sid, rid, added_by, added_on) VALUES('".$album."', '".$track[$z]."', '".$artist[$z]."', '".$_SESSION["userkey"]."', '" . $time . "')"; 
       echo 'First else.'; 
       var_dump($track, $artist, $album, $_SESSION["userkey"]); 
       $res = mysql_query($sql); 
       var_dump($res); 
      } 
     } else { 
      $sql = "INSERT INTO tracklist(aid, sid, rid, added_by, added_on) VALUES('".$album."', '".$track[$z]."', '".$artist[$z]."', '".$_SESSION["userkey"]."', '" . $time . "')"; 
      echo 'Second else.'; 
      var_dump($track, $artist, $album, $_SESSION["userkey"]); 
      $res = mysql_query($sql); 
      var_dump($res); 
     } 
    } 

希望它帮助!

+0

将'error_reporting'设置为'-1'可能不会立即“点亮灯泡”。这里有'E_ALL'。反正+1。 – 2012-03-06 22:24:32

+0

@Linus:根据你的PHP版本,E_ALL和-1没有相同的行为。我无法在这里假设PHP版本。 – Maxime 2012-03-06 22:32:05

+0

出于好奇,我很想看到一个这样的工作示例。文档中的“提示”(http://php.net/manual/en/function.error-reporting.php)似乎相当矛盾; 4.x中的'E_ALL'不会覆盖'E_DEPRECATED',因为它还不知道它(还)。什么错误信息被跳过呢? – 2012-03-06 22:40:29

1

除非你输出的东西,一个空白的屏幕结束执行是正常。尝试添加这对你的代码的最后踢和笑声:

echo('This is a test...'); 
+0

至少它应该完成循环,因为我在这段代码后面使用了'header()'。 – Tisha 2012-03-04 20:06:50