我的功能不想加载。我试图回应id
,name
和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 () {
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>";
}
}
?>
答案 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()
功能。$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上关于全球的一些文章:
选择权在你手中。