SQL Query导致页面变为空白

时间:2009-03-09 22:01:30

标签: php sql

我正在使用php建立一个网站,我在使用SQL查询时遇到了一些麻烦。

$dataArray = array();
$result = mysql_query("SELECT * FROM test WHERE web_id='$websiteID'")
    or die(mysql_error());

while ($row = mysql_fetch_array($result)) {
    $k = $row['kfoo'];
    $v = $row['vbar'];
    $dataArray[$k] = $v;
}

这是应该的代码,然而这导致页面变为空白(即只显示全白)。我已经仔细检查过,web_id肯定是正确的名称和正确的案例。

如果我将查询中的web_id更改为“foo”(基本上不是web_id),则会显示该页面,但会显示错误消息“Unknown column” foo'in'where clause'“。

有人知道是什么原因引起的吗?这是我创建表测试的代码:

$dataDB = "CREATE TABLE test
(
    data_id INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY(data_id),
    web_id INT,
    kfoo TEXT,
    vbar TEXT
)";

mysql_query($dataDB,$con);  

更新

根据这里的一些答案,我从$ websiteID周围删除了引号并使用

显示错误
error_reporting(E_ALL);
ini_set('display_errors', 1);

这显示了很多错误,包括我之前修复过的语法错误。然而,许多错误仍然存​​在,对我来说没有多大意义。这是我的方法的完整代码:

function getOutputSQL($websiteID,$userInput) {
 $result = mysql_query("SELECT * FROM websites WHERE websiteID=$websiteID") 
    or die(mysql_error());

  while ($row = mysql_fetch_array($result)){
    $url = $row['url'];
    $exp = $row['exp'];
    $output= $row['textPrint'];
    $endUrlStart = $row['outUrlStart'];
    $endUrlEnd = $row['outURLEnd'];

    $image = $row['image'];
    $print = $row['print'];
    $post = $row['post'];

    $dataSource = $row['dataSource'];
    $dataSourceName = $row['dataSourceName'];           

  }

  // construct array of data names and values
  $dataArray = array();
  $result = mysql_query("SELECT * FROM test WHERE web_id=$websiteID") 
    or die(mysql_error());

  while ($row = mysql_fetch_array($result)) {
    $k = $row['kfoo'];
    $v = $row['vbar'];
    $dataArray[$k] = $v;
  }

  // construct array of expressions and replacements
  $result = mysql_query("SELECT * FROM regex WHERE web_id=$websiteID");
  $expArray = array();

  while ($row = mysql_fetch_array($result)) {
    $e = $row['ex'];
    $r = $row['re'];
    $expArray[$e] = $r; 
  }

  return getOutput($userInput,$url,$exp,$output,$endUrlStart,
     $endUrlEnd,$dataSource,$dataSourceName,$post,$image,$print,
     $expArray,$dataArray); 
}

我得到的错误都是这样的 -

  

注意:未定义的变量:第113行/home/daniel/web/resultsTest.php中的输出“

对于url,exp,output,endUrlStart,endUrlEnd,dataSource,dataSourceName,post,image和print,重复多次。行113是大回程行。

问题是,据我所知,这些变量是定义的,我知道该表不是空的,因为我可以在另一页上显示它。

解决

排序。问题实际上是在我的代码的另一部分 - 我错误地调用了getOutputSQL,但我现在已经修复了它!

4 个答案:

答案 0 :(得分:2)

我希望你的实际代码实际上没有任何东西,如果这是你拥有它的所有代码,那么就没有输出任何东西,因为你没有输出没有错误(没有回声或印刷品是模板或任何东西)< / p>

还要确保设置了error_reporting和display_errors。您可以使用

从脚本顶部执行此操作
error_reporting(E_ALL);
ini_set('display_errors', 1);

这样你就会看到所有的错误。

修改
PHP有多种类型的错误,包括致命错误,警告和通知。通知告诉您何时使用未定义的变量或不推荐使用的函数,您几乎可以忽略它们。您可以更改设置,以便您不会使用以下内容查看它们:

error_reporting(E_ALL ^ E_NOTICE);

然后你只会看到真正的错误(警告和致命错误)。

更多编辑
然后这些变量真的没有设置,在调用getOutput()之前尝试这样的事情:

echo "<pre>";
var_dump($userInput);
var_dump($url);
//etc.
echo "</pre>";

并查看变量是否确实已设置。

答案 1 :(得分:1)

通常,php中的空白页表示已禁用error notifications。首先,您应该通过.htaccess或php.ini启用它们。

BTW:据我所知,整数不应该在SQL中引用。

答案 2 :(得分:1)

请改为尝试:

$dataArray = array();
if(is_numeric($websiteID){
        $result = mysql_query("SELECT * FROM test WHERE web_id=$websiteID") or die(mysql_error());

        while ($row = mysql_fetch_array($result)) {
                $k = $row['kfoo'];
                $v = $row['vbar'];
                $dataArray[$k] = $v;
        }
}

注意我删除了websiteID变量周围的''。这意味着mysql不会将其视为字符串,而是将其视为int,这是您在mysql表创建中指定的。我还检查网站ID是否是一个数字。如果不是,则执行sql查询没有意义,因为您将得到零结果。这可以防止sql注入。

答案 3 :(得分:0)

在循环结束时销毁在循环内定义的变量。这意味着您在第一个while循环中创建的输出变量在循环后不存在。您应该在while循环之外定义它们,然后在循环内设置值:

function getOutputSQL($websiteID,$userInput) {
 $result = mysql_query("SELECT * FROM websites WHERE websiteID=$websiteID") 
    or die(mysql_error());
  $url = "";
  $exp = "";
  $output = "";
  //... etc for all the other variables you need in the function at the end.
  while ($row = mysql_fetch_array($result)){
    $url = $row['url'];
    $exp = $row['exp'];
    $output= $row['textPrint'];
    $endUrlStart = $row['outUrlStart'];
    $endUrlEnd = $row['outURLEnd'];

    $image = $row['image'];
    $print = $row['print'];
    $post = $row['post'];

    $dataSource = $row['dataSource'];
    $dataSourceName = $row['dataSourceName'];                   

  }
  // the rest of your function...