页面不会回显PDO语句的结果

时间:2014-11-14 00:31:12

标签: php mysql pdo

我的功能不想加载。我试图回应idnameage。我做错了什么?

<?php

$db_host = "localhost";
$db_username = "root";
$db_pass = "";
$db_name = "testdb";

$dbh = new PDO('mysql:host='.$db_host.';dbname='.$db_name,$db_username,$db_pass);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);

function getManger () {

    global $con;

    $sql= $dbh->prepare("SELECT * FROM test_tbl");
    $stmt = $db->prepare($sql); 
    $stmt->execute();    

    while( $row = $stmt->fetch(PDO::FETCH_ASSOC) ) { 

        $id= $row['id'];
        $name = $row['name'];
        $age - $row['age'];

        echo "<li>$id</li>";
        echo "<li>$name</li>";
        echo "<li>$age</li>";

    }

}

?>

2 个答案:

答案 0 :(得分:3)

您使用

global $con;

但是不要在函数内部引用它,而是引用$dbh,它不在函数范围内,因为它没有被设置为全局引用,所以选项可能是:

function getManger () {
global $dbh;

$sql= $dbh->prepare("SELECT * FROM test_tbl");

...
}

或者

function getManger ($DBCon) {

$sql= $DBCon->prepare("SELECT * FROM test_tbl");
...
}

然后调用函数:

getManager($dbh);

这会将数据库连接变量直接传递给要在内部使用的函数参数。我更推荐使用global

更多。看起来您甚至不会根据代码调用有问题的函数。你确定你这样做了吗?


该函数内的其他拼写错误可能是:

$age - $row['age'];

您目前正在告诉PHP从存储在$row['age'];中的整数中减去$age,也许您的意思是:

$age = $row['age'];

正如@ fred-ii在评论中指出的那样。您正在调用两次准备,这是不必要的,可能会触发错误,具体取决于您的错误报告设置。

$sql= $dbh->prepare("SELECT * FROM test_tbl");
$stmt = $db->prepare($sql);

应该是1)

$sql = "SELECT * FROM test_tbl";
$stmt = $dbh->prepare($sql);

OR

$stmt = $dbh->prepare("SELECT * FROM test_tbl");

但是第二个准备命令中可能还有一个拼写错误?

  

$ stmt = $ db - &gt; prepare($ sql);

答案 1 :(得分:2)

概述代码中的错误,并提供经过测试和运行的解决方案:

  • 您已经两次调用prepare()功能。
  • 为SELECT使用错误的变量 ...使用$sql$stmt
  • 可能调用您的getManger()函数。
  • 使用连字符而不是等号 $age - $row['age']; =&gt; $age = $row['age'];

<强>重写:

<?php 
$db_host = "localhost";
$db_username = "root";
$db_pass = "";
$db_name = "testdb";

$dbh = new PDO('mysql:host='.$db_host.';dbname='.$db_name,$db_username,$db_pass);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);

  function getManger($dbh) {

    $stmt= $dbh->prepare("SELECT * FROM test_tbl");
    $stmt->execute();    

    while( $row = $stmt->fetch(PDO::FETCH_ASSOC) ) { 

        $id   = $row['id'];
        $name = $row['name'];
        $age  = $row['age'];

        echo "<li>$id</li>";
        echo "<li>$name</li>";
        echo "<li>$age</li>";
    }
}

// call the function
getManger($dbh); 

<强> 脚注

通常最好在您的函数中传递数据库连接变量,而不是将其设置为全局。

以下是Stack上关于全球的一些文章:

选择权在你手中。