问题描述
|
我有一个问题正盯着我,但我似乎无法解决。
首先:
1)在检查sql注入之前先对代码进行解析。
2)$ dbc是作为另一个脚本的一部分的引用,该脚本被称为“ require_once()\”,并且可以完美地工作于其他两个脚本,具体取决于它
3)直接输入到MysqL时的查询文本将准确地回调到Im之后
4)如果我将错误的数组放入$ displayBlogs中,则脚本的其余部分将按其应有的方式工作。
该表已填充。那么,为什么我似乎没有收到任何结果,没有任何错误(已通过MysqLi_error($ dbc)检查)?博客似乎是空的。
function getSnippets()
{
// set up the query
$query1 = \"SELECT * FROM blogs LIMIT 0,10\";
// action the query and save the connection
$blogs = MysqLi_query($dbc,$query1);
// blank out the variable that will be used to save the query results
$displayBlogs = \'\';
// iterate through the query results and set up the module return
while($blog = MysqLi_fetch_array($blogs))
{
$displayBlogs .= \"<div class=\'article\'><a href=\'\" . $blog[\'link\'] .\"\'>\" .
\"<h1>\" . $blog[\'title\'] . \"</h1>\" .
\"<h2>\" . $blog[\'date\'] . \"</h2>\" .
\"<p>\" . $blog[\'body\'] . \"</p>\" .
\"</a></div>\";
}
return $displayBlogs;
}
解决方法
您可以声明$ dbc的全局作用域:
function getSnippets()
{
global $dbc;
// declaring $dbc global to have it accessed outside the scope of the function
}
或者,甚至更好的方法是将其作为函数的参数传递,因为使用全局变量被认为是不好的做法(请在许多此类SO问题中检查原因):
function getSnippets($dbc)
{
$connection = $dbc;
//...
$blogs = mysqli_query($connection,$query1);
// rest of code...
}
, 即使需要,也不可以从函数内部访问$dbc
变量。要使其成为可能,请将其用作全局变量。
在这种情况下,应首先编写:
function getSnippets()
{
global $dbc;
, 您需要五英镑吗?
, 您应该在所使用的每个变量上使用var_dump(),直到罪魁祸首。
$dbc
$query1
$blogs
$blog
另外,您应该监视mysql日志以查看数据库端实际发生的情况(如果有的话)。
我意识到并没有解决您的问题(很确定Scott做到了),但是希望将来能够引导您隔离并找出类似的错误(您会犯下这些错误)。