【问题标题】:Get the count of result lines获取结果行数
【发布时间】:2015-04-13 11:02:55
【问题描述】:

我尝试在 JS 和 PHP 中做一些事情。

我在 Ajax 中调用了一个 PHP 文件,我希望这段代码返回结果行数。所以我附和它:

$connexion = new PDO($source, $utilisateur);
$requete = "SELECT * FROM scores WHERE pseudo = '".$_POST['login']."' AND Score >= 0";
$resultat = $connexion->query($requete);

echo ($resultat->rowCount());

当我尝试在 Ajax 中完成它时它不起作用,它返回一个致命错误:“调用非对象上的成员函数 rowCount()”。

$.ajax({
    url: "../php/levelState.php",
    type: "POST"
}).done(function(levelUnlocked) {
    // Affichage de l'écran de sélection 
    $("#title, #game").hide();
    $("link").attr({rel:"stylesheet", href:"../css/select.css"});
    $("#select").fadeIn("slow"); 
    for (var i = 0; i < levelUnlocked; i++) {
        $('#' + parseInt(levelUnlocked + 1)).removeClass('levelLock').addClass('level');
    } 
});

});

感谢您的帮助!

【问题讨论】:

  • 你的 php 脚本被破坏了,修复它。在我看来,您还应该在 PHP 脚本中返回 json,以便它发送 JS 可以轻松使用的东西。

标签: javascript php ajax


【解决方案1】:

要修复你的 PHP,我会做这样的事情。

header('Content-Type:application/json');
$connexion = new PDO($source, $utilisateur);
$stmt = $connexion->prepare("SELECT COUNT(*) FROM scores WHERE pseudo = ? AND Score >= 0");
$stmt->execute(array($_POST['login']));
$res = $stmt->fetch(PDO::FETCH_NUM);
echo json_encode(array_pop($res));

【讨论】:

  • 我忘记提供登录值,但我已修复它。我正在尝试了解您的回复,但在这种情况下,查询不会失败,因为至少有一个分数已注册。
  • 尝试在不使用 Ajax 的情况下运行 PHP 脚本并调试数据库调用。有一些东西让你的 db 调用出错,可能是你的数据库连接或表结构有问题。如果没有实际的错误消息,我无能为力。
【解决方案2】:

您的请求返回 null。当您执行$resultat-&gt;rowCount() 时,您的应用程序会产生致命错误。您应该检查您的$resultat 是否为空。

无论如何,您当前的查询等于:"SELECT * FROM scores WHERE pseudo = '' AND Score &gt;= 0";。这就是您收到此错误的原因。顺便说一下你应该使用准备好的语句

要解决您的问题,您应该在 ajax 函数中指定您发送的数据(我添加了关键字data)。

$.ajax({
    url: "../php/levelState.php",
    data: { login: $("#selector-login").val() } // You should add something like this
    type: "POST"
}).done(function(levelUnlocked) {
    // Affichage de l'écran de sélection 
    $("#title, #game").hide();
    $("link").attr({rel:"stylesheet", href:"../css/select.css"});
    $("#select").fadeIn("slow"); 
    for (var i = 0; i < levelUnlocked; i++) {
        $('#' + parseInt(levelUnlocked + 1)).removeClass('levelLock').addClass('level');
    } 
});

【讨论】:

  • 你是对的,$resultat 变量是假的,我还有任何错误。我确实喜欢你的例子,所以我传递了数据,但事实上如果我理解我的请求可以找到结果?我有一个对应于查询的值...
  • 问题解决了!没有结果,因为我在表格名称上做错了......
  • 我很高兴它有帮助。您可以考虑@gnarly 关于准备好的语句的答案。
【解决方案3】:

the PHP documentation中所述

PDO::query() 返回一个 PDOStatement 对象,失败时返回 FALSE。

我最好的猜测是您的查询失败并且 $resultat 的值为 FALSE,这就是为什么您不能对其运行 rowCount() 方法的原因。

【讨论】:

    猜你喜欢
    • 2014-11-03
    • 1970-01-01
    • 2011-03-04
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    相关资源
    最近更新 更多