我有一个用concrete5制作的自定义块,它从数据库中获取所有worker的数组并将其传递给视图。这个块也使用了一个参数,该参数在块被添加到页面时给出(它是WHERE sql语句的一部分,即parent_id = 261)这是我在块控制器中的函数:
public function view()
{
$db = new mysqli(WP_SERVER, WP_USERNAME, WP_PASSWORD, WP_DATABASE);
if($db->connect_errno > 0)
{
echo '<!-- Unable to connect to database [' . $db->connect_error . '] -->';
}
else
{
$SQL_ENTRIES = "SELECT * FROM `wp_posts` WHERE post_type = 'page' AND ".$query." order by replace(post_title,'£','LZ') asc";
if(!$entries_result = $db->query($SQL_ENTRIES))
{
echo '<!-- There was an error running the query [' . $db->error . '] -->';
}
else
{
$entries = array();
while($row = $entries_result->fetch_assoc()) $entries[] = $row;
$SQL_META = "SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (SELECT ID FROM `wp_posts` WHERE post_type = 'page' AND ".$query.")";
if(!$meta_result = $db->query($SQL_META))
{
echo '<!-- There was an error running the query [' . $db->error . '] -->';
}
else
{
$metas = array();
while($row = $meta_result->fetch_assoc())
{
if (!isset($metas[$row['post_id']])) $metas[$row['post_id']] = array ();
$metas[$row['post_id']][] = $row;
}
$updated_entries = array ();
foreach ($entries as $entry)
{
if (isset($metas[$entry['ID']]))
{
foreach ($metas[$entry['ID']] as $meta)
{
$entry[$meta['meta_key']] = $meta['meta_value'];
}
}
$updated_entries[] = $entry;
}
$this->set('updated_entries', $updated_entries);
}
}
}
}
在我的视图文件中:
$get = $updated_entries;
echo json_encode($get);
它没有列出任何内容,这很奇怪,因为当函数放在视图文件中时,它会正常列出所有内容。有什么帮助吗?
答案 0 :(得分:0)
我的猜测是因为您的代码使用的是$query
变量,但这并未在函数中的任何位置定义。如果此代码在您的视图文件中有效,那么我打赌在视图本身中设置了$query
变量。或者它可能是您传递到数据库连接的WP_SERVER
,WP_USERNAME
,WP_PASSWORD
和WP_DATABASE
常量?那些来自哪里?
附注:我确实希望已正确转义此$query
以避免sql注入。如果您只是从$ _GET或$ _POST中获取一些参数并将它们输入$query
,那么您的安全漏洞就会很大。