Php SQL查询导致页面变为空白

Php SQL查询导致页面变为空白,php,sql,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']; $dat

我正在使用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\u id
绝对是正确的名称和大小写

如果我将查询中的
web\u id
更改为例如“foo”(基本上是除
web\u id
以外的任何内容),则页面将显示,但会显示错误消息“where子句中的未知列“foo”

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

$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,但我现在已经修复了它!

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


顺便说一句:据我所知,在SQL中不应该引用整数。

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


顺便说一句:据我所知,在SQL中不应该引用整数。

我希望您的实际代码实际上不会输出任何内容,如果这是您所有的代码,那么就说明没有输出任何内容,因为在没有错误的情况下(没有回音或打印是模板或任何内容)不会输出任何内容

另外,请确保设置了错误报告和显示错误。您可以使用

error_reporting(E_ALL);
ini_set('display_errors', 1);
这样你就会看到所有的错误

编辑
PHP有多种类型的错误,包括致命错误、警告和通知。通知告诉您,当您使用未定义的变量或不推荐使用的函数时,您几乎可以忽略它们。您可以通过以下方式更改设置,使您不会看到它们:

error_reporting(E_ALL ^ E_NOTICE);
然后,您将只看到真正的错误(警告和致命错误)

更多编辑
如果这些变量确实未设置,请在调用getOutput()之前尝试以下操作:

echo”“;
var_dump($userInput);
var_dump($url);
//等等。
回声“;

看看变量是否真的设置好了。

我希望您的实际代码实际上没有输出任何内容,如果这是您所有的代码,那么就没有输出任何内容,因为在没有错误的情况下(没有回音或打印是模板或任何内容)

另外,请确保设置了错误报告和显示错误。您可以使用

error_reporting(E_ALL);
ini_set('display_errors', 1);
这样你就会看到所有的错误

编辑
PHP有多种类型的错误,包括致命错误、警告和通知。通知告诉您,当您使用未定义的变量或不推荐使用的函数时,您几乎可以忽略它们。您可以通过以下方式更改设置,使您不会看到它们:

error_reporting(E_ALL ^ E_NOTICE);
然后,您将只看到真正的错误(警告和致命错误)

更多编辑
如果这些变量确实未设置,请在调用getOutput()之前尝试以下操作:

echo”“;
var_dump($userInput);
var_dump($url);
//等等。
回声“;
并查看变量是否已真正设置。

请尝试以下操作:

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...
请注意,我删除了websiteID变量周围的“”。这意味着mysql不会将其视为字符串,而是视为int,这是您在mysql表创建中指定的。我还检查websiteID是否为数字。如果不是,则执行sql查询没有意义,因为您将获得零结果。这可以防止sql注入ns.

试试这个:

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...

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

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


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


这暴露了大量的错误,这些错误对我来说都没有多大意义。我已经用新问题更新了问题。如果我按你建议的方式取消通知,我只会得到一个空白页。变量已设置,但我发现了问题,这与我调用getOutputSQL的方式有关。这暴露了大量的错误,这些错误对我来说都没有多大意义。我已用新问题更新了问题。如果我按您建议的方式取消通知,我只会得到一个空白页。变量已设置,但我发现问题在于如何调用getOutputSQL。我尝试了此操作,页面再次显示为空白。出现了奇怪的情况。我尝试了此操作,页面再次显示为空白。发生了一些奇怪的事情。