我正在使用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,但我现在已经修复了它!
答案 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...