无法返回数据库查询结果

时间:2014-08-08 20:14:04

标签: php jquery pdo

我是在网站上整合搜索工具的早期阶段,但我遇到了绊脚石。目前,我正在使用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
...

感谢。

2 个答案:

答案 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没有根据内爆返回实际数组,否则不知道为什么内容返回值并将其回显而无法返回任何内容,在这种情况下它应该在某处发生错误...