Can';t在PHP中将$db作为全局变量传递
我想知道为什么我不能在PHP中这样做 DB.PHPCan';t在PHP中将$db作为全局变量传递,php,mysql,pdo,Php,Mysql,Pdo,我想知道为什么我不能在PHP中这样做 DB.PHP function db_connect(){ try { $db = new PDO('xxxxxxxx'); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { echo $e->getMessage(); }
function db_connect(){
try {
$db = new PDO('xxxxxxxx');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
echo $e->getMessage();
}
return $db;
}
require_once('db.php');
$db = db_connect();
//Incoming AJAX request
if(isset($_POST['rowId'])) $rowId = $_POST['rowId'];
if(isset($_POST['func'])){
$func = $_POST['func'];
switch($func){
case "info":
echo json_encode(info($rowId));
break;
}
}
function info($rowId){
global $db;
$rowInfo = $db->prepare("SELECT name FROM table WHERE id = :rowId");
$rowInfo->bindParam(':rowId', $rowId);
$rowInfo->execute();
//do more stuff
FUNCTION.PHP
function db_connect(){
try {
$db = new PDO('xxxxxxxx');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
echo $e->getMessage();
}
return $db;
}
require_once('db.php');
$db = db_connect();
//Incoming AJAX request
if(isset($_POST['rowId'])) $rowId = $_POST['rowId'];
if(isset($_POST['func'])){
$func = $_POST['func'];
switch($func){
case "info":
echo json_encode(info($rowId));
break;
}
}
function info($rowId){
global $db;
$rowInfo = $db->prepare("SELECT name FROM table WHERE id = :rowId");
$rowInfo->bindParam(':rowId', $rowId);
$rowInfo->execute();
//do more stuff
我得到这个错误
可捕获的致命错误:类PDO的对象无法转换为字符串
我可以用两种方法解决它
$db
传递到函数中有什么问题?错误发生在execte()上。我可以删除它之后的任何内容,但仍然会收到错误。因此$rowID包含一个对象 execute函数尝试将消息对象转换为字符串,但发现没有声明uuu toString函数 所以要么宣布
public function __toString() {
return $the_string;
}
或者创建另一个可以传递给执行函数的公共函数/成员。@mario他有
$db=db_connect()代码>,在全局范围内分配该变量。错误消息表示该变量已设置为PDO对象,但您正在需要字符串的位置使用它,如echo$db代码>。是什么导致了这个错误?你从info函数返回了什么。错误似乎是返回pdo$rowInfo对象,然后尝试将其编码为json字符串。将信息($rowId)拉到一个单独的行中,看看从中得到了什么。在db\u connect()
函数中处理异常非常无用。如果连接失败,您仍然返回$db
,该值将为null
。另外,错误消息的其余部分在哪里?哪个文件的哪一行导致了错误?@Tester您提到的//执行更多操作
您必须确保返回$rowInfo->fetch(),而不返回任何其他内容。在代码中,您正在将pdo对象转换为字符串,例如strval($rowInfo)您将得到可捕获的致命错误:类PDOStatement的对象无法转换为字符串错误。但为什么我能够通过将$db作为参数传递到函数中来解决此问题?此外,我在传递$u POST var时从未遇到过任何问题。它已经是一个字符串,或者至少它被接受为一个字符串。