2017-08-25 46 views
-1

我有一个数据库连接的脚本是为什么显示pdo未定义?

<?php 

//$dsn ='mysql:dbname=medicare;host=localhost'; 
$me = "root"; 
$password =""; 

try{ 
$pdo = new PDO('mysql:host=localhost;dbname=medicare',$me,$password); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} 
catch(PDOException $e){ 
echo"Error!:".$e->getMessage()."<br>"; 
die(); 


} 

?> 

然后我有一个函数在db_operations类,它是

public static function insert_admin($name,$pass){ 
// require_once("/connect.php"); 
$security = "[email protected]/n/?"; 
$pass = md5($pass,PASSWORD_DEFAULT).$security; 
$sql = "INSERT INTO admin(username,password) VALUES(:username,:password)"; 

$stmt = $pdo->prepare($sql); (line 79) 
$stmt->bindParam(':username',$name,PDO::PARAM_STR); 
$stmt->bindParam(':password',$pass,PDO::PARAM_STR); 
$stmt->execute(); 

$pdo = null; 


} 

添加数据,但它已表现出

Notice: Undefined variable: pdo in F:\xampp\htdocs\medicare\Model\class_db_operations.php on line 79

Fatal error: Call to a member function prepare() on a non-object in F:\xampp\htdocs\medicare\Model\class_db_operations.php on line 79 someone please help.

+2

如果你想在那里使用它,你需要把变量'$ pdo'传递给你的函数。 –

+0

你能帮我多一点更清楚的提示吗? –

+0

你应该要求你的连接文件:require_once(__ CONNECTION_FILE_); – okante

回答

0

有当调用$pdo->prepare()时,定义为$pdo,您需要将其作为参数传递或使其在对象中可用一个属性,并用另一种方法设置它。

+0

你会建议我一个有用的链接或例子,将清楚这个概念给我吗? –

+0

我还没有在PHP基础知识中找到它,但它非常简单:如果函数中没有定义该变量,则不能在该函数中使用变量,无论是在代码本身中,还是作为参数传递如果你从属性中访问它,如果函数是一个对象方法,或者如果变量是在全局范围中定义的,则使用关键字'global'。 – ksjohn

0
public static function insert_admin($name,$pass){ 
// require_once("/connect.php"); 
global $pdo; 
$security = "[email protected]/n/?"; 
$pass = md5($pass,PASSWORD_DEFAULT).$security; 
$sql = "INSERT INTO admin(username,password) VALUES(:username,:password)"; 

$stmt = $pdo->prepare($sql); (line 79) 
$stmt->bindParam(':username',$name,PDO::PARAM_STR); 
$stmt->bindParam(':password',$pass,PDO::PARAM_STR); 
$stmt->execute(); 

$pdo = null; 


} 

你为什么要在最后设置$ pdo为null?

+0

谢谢。有用。 –

+0

谢谢。有用。 –