2012-06-12 32 views
0

这里我共享两个函数的代码。两者都返回一个PDO对象的实例。但是其中一个使用PDO连接插入语句时正常工作,而其他人不会。在这两种情况下使用相同的代码来插入记录。PHP:使用导致不一致结果的静态变量

这是返回的PDO对象与insert语句一起使用的函数。

public function getPDO() { 

    /** mysql hostname */ 
$hostName = 'localhost'; 

/** mysql database name */ 
$dbName = 'testDB'; 

/** db user name */ 
$userName = 'root'; 

/** db password */ 
$password = ''; 

try { 
    $str = "mysql:dbname=$dbName;host=$hostName"; 
    $db = new PDO($str, $userName, $password); 
     return $db; 
    }catch(PDOException $e) { 
     echo "PDO connection failed. <br />"; 
     echo $e->getMessage(); 
     return null; 
    } 
} 

这是返回的PDO对象不适用于insert语句的函数。在这个函数中,连接字符串和其他连接参数是从类中定义的静态值中读取的。

public function getPDO() { 
    try { 
     $connStr = "mysql:dbName=".self::$dbName.";host=".self::$hostName; 
    $db = new PDO($connStr, self::$userName, self::$password); 
     return $db; 
    }catch(PDOException $e) { 
     echo "PDO connection failed. <br />"; 
     echo $e->getMessage(); 
     return null; 
    } 
} 

这里是如何的静态变量的定义:

/** mysql hostname */ 
static $hostName = "localhost"; 

/** mysql database name */ 
static $dbName = "testDB"; 

/** db user name */ 
static $userName = 'root'; 

/** db password */ 
static $password = ''; 

这里是一段代码,它使用PDO对象中插入一条记录。

public function save() { 
    //get the PDO 
$db_func = new db_functions(); 
$pdo = $db_func->getPDO(); 
$query = "INSERT INTO city(name, state, country) VALUES ('Vienna', 'Virginia', 'USA')"; 
echo $query; 
$count = $pdo->exec($query); 
if($count > 0) { 
    echo '</br> Successful </br>'; 
}else { 
    echo '</br> Unsuccessful </br>'; 
} 

} 

当我使用第二个函数时,PDO对象已成功创建,但插入失败。我没有看到任何错误,但计数为0并且没有DB中的记录。

我怀疑这与我在我的代码中声明和使用静态变量的方式有关。谢谢你的帮助。

+1

您可以尝试将'echo $ db-> errorInfo();'添加到您的Unsuccessful块以从PDO中获取任何错误。 –

回答

1

它与静态变量无关,你的第二个方法不能正确传递数据库名称。它必须是'dbname'而不是'dbName'。

+0

感谢这..它修复了问题... – edorahg