我是在网站上整合搜索工具的早期阶段,但我遇到了绊脚石。目前,我正在使用jQuery AJAX进行一些测试,但问题肯定在于我的php:
...
$searchq = $_POST['searchq'];
$output = '';
$db = new PDO($dsn, $mysqluser, $mysqlpass, array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
function getData($db){
// Prepare resource query statement
$stmt = $db->query("SELECT * FROM mod_site_content WHERE alias = ':searchq'");
// Bind paremeters
$stmt->bindParam(':searchq', $searchq, PDO::PARAM_STR);
// Execute query
$stmt->execute();
// Grab result
$output = $stmt->fetchAll();
// Return output
done($output);
};
try {
getData($db);
} catch(PDOException $e){
echo $e->getMessage();
}
function done($out){
echo $out;
}
目前我只是将结果传递给我的AJAX .done()
方法中的console.log()。以上输出"数组"什么都没有,无论我是否搜索应该存在的东西。
如果我将上面的内容稍微改为:
function getData($db){
...
$output = $stmt->fetchAll();
$result = implode($output,"--");
// Reture output
done($result);
};
我什么也得不回。
mod_site_content
看起来像这样:
id | type | alias
-------------------------
1 | document | home
2 | document | projects
...
感谢。
答案 0 :(得分:1)
您的问题在这里:
$stmt = $db->query("SELECT * FROM mod_site_content WHERE alias = ':searchq'");
替换它:
$stmt = $db->prepare("SELECT * FROM mod_site_content WHERE alias = :searchq");
PDO变量ie:searchq不应被'
包围,否则PDO会将它们视为字符串,当您尝试绑定searchq
另外请注意我使用的是prepare()
而不是query()
,您需要先准备查询,然后绑定params然后执行
第三个问题,您应该将$searchq
传递给getData
函数
我在这里复制并粘贴了您的代码,并进行了编辑,只是为了清醒我的头,请您测试一下并告诉我它是否有效?
$searchq = $_POST['searchq'];
$output = '';
$db = new PDO($dsn, $mysqluser, $mysqlpass, array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
function getData($db, $searchq){
// Prepare resource query statement
$stmt = $db->prepare("SELECT * FROM mod_site_content WHERE alias = :searchq");
// Bind paremeters
$stmt->bindParam(':searchq', $searchq, PDO::PARAM_STR);
// Execute query
$stmt->execute();
// Grab result
$output = $stmt->fetchAll();
// Return output
done($output);
};
try {
getData($db, $searchq);
} catch(PDOException $e){
echo $e->getMessage();
}
function done($out){
if(is_array($out)){
print_r($out);
} else {
echo $out;
}
}
答案 1 :(得分:0)
echo json_encode($out)
并确保您希望浏览器上有一个json对象。
除非->fetchAll
没有根据内爆返回实际数组,否则不知道为什么内容返回值并将其回显而无法返回任何内容,在这种情况下它应该在某处发生错误...