PHP:使用静态变量导致不一致的结果

时间:2012-06-12 03:46:51

标签: php

这里我分享了两个函数的代码。两者都返回PDO对象的实例。但是当使用PDO连接插入语句时,其中一个工作正常,而另一个则没有。在两种情况下都使用相同的相同代码来插入记录。

这是返回的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且数据库中没有记录。

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

1 个答案:

答案 0 :(得分:1)

它与静态变量无关,第二种方法只是没有正确传递数据库名称。它必须是'dbname'而不是'dbName'。