使用 PDO 从数据库回显单行时出错

Posted

技术标签:

【中文标题】使用 PDO 从数据库回显单行时出错【英文标题】:Error using PDO to Echo a single row from database 【发布时间】:2015-08-12 20:36:48 【问题描述】:

嗨_我正在尝试使用 PDO SELECT 语句从我的数据库中获取单行的值,然后将其从 php 文件回显到我的 javascript 文件中。

如果该值等于1,那么我想创建一个警报,说"The value is 1"。 如果该值不等于1,那么我想创建一个提醒说"The value is not 1"

我读过其他关于类似问题的帖子,但问题似乎涉及数组,但我只想要一个值。我想我几乎有正确的 Javascript 和 PHP/PDO 代码来执行此操作,但我认为 PDO 有问题。

我选择的行的数据类型是 VARCHAR。 我通过 AJAX POST 将用户 ID(从 Facebook 的 Graph API 检索)发送到 PHP 文件,然后使用 bindParam 准备将其包含在查询中。

console.log 正在返回此错误消息: Warning: log() expects parameter 1 to be double, array given in ../scripts/valuecheck.php on line 29

这是我的 Javascript 和 AJAX POST:

function checkValue() 

FB.login(function(response) 
  if (response.authResponse) 
    console.log('Welcome!  Fetching your information.... ');

     FB.api('/me', function(response) 

     if (response.error) 
       console.log('Error - ' + response.error.message);
     
     else 
       var userid = response.id;

                            $.ajax(
         url: 'scripts/valuecheck.php',
         data: 'userid' : userid,
        type: "POST",
        success: function(response)
            console.log(response);
                 if(response==1)
                         alert( "The value is 1");
                         
                    else
                        alert( "The value is not 1");
                              
                    
       );

    );
   else 
    console.log('User cancelled login or did not fully authorize.');
  
 );

这是我的 PHP 文件:

<?php

$servername = "myservername";
$username = "myusername";
$password = "mypassword";
$dbname = "mydbname";

try 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


$stmt = $conn->prepare("SELECT `value` FROM `table1` WHERE `id` = :currentuserid"); 
$stmt->bindParam(':currentuserid', $currentuserid);
$currentuserid = $_POST['userid'];
$stmt->execute(); 

$result = $stmt->fetch(); 
echo $result;
    

catch(PDOException $e)

    echo "Error: " . $e->getMessage();

$conn = null;
console.log($result);
?>

任何有关如何解决此问题的帮助将不胜感激! 提前致谢。

【问题讨论】:

首先将LIMIT 1 添加到您的查询中,然后在关闭连接之前写入echo $res-&gt;fetchColumn() 或将其保存到变量中。查看手册php.net/manual/en/pdostatement.rowcount.phpExample #2 【参考方案1】:

fetch返回一个数组,SELECT中的每一列都有一个元素,所以需要使用:

echo $result['value'];

【讨论】:

【参考方案2】:

你正在混合 JS 和 PHP:

catch(PDOException $e)

    echo "Error: " . $e->getMessage();

$conn = null;
console.log($result);
^^^^^^^^^^^^^^^^^^^---this is javascript, not PHP.

【讨论】:

嗨@mar​​c-b 感谢您的评论,我删除了console.log,现在回声正在发回单词“Array”,这是否意味着 PDO 已设置为获取数组单一值? 没有。这意味着它是一个数组,并且您正在尝试在字符串上下文中使用它。 $x = array(); echo $x; 将输出 Array。 PHP 不会为您字符串化数组。请改用var_dump($result)

以上是关于使用 PDO 从数据库回显单行时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用 PDO 匹配数据库中的行时遇到问题

使用phpmyadmin导入数据库后出错:未定义属性:PDO :: $ connect_error

无法通过 PDO_ODBC 从 Access 检索 UTF-8 重音字符

JS实现单选按钮回显时页面效果出现,但选中单选框的值为空

在 PHP 中创建与 PDO 的连接时出错

在 PHP 中创建与 PDO 的连接时出错