Php SQL查询导致页面变为空白
我正在使用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
$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。我尝试了此操作,页面再次显示为空白。出现了奇怪的情况。我尝试了此操作,页面再次显示为空白。发生了一些奇怪的事情。