这里我分享两个函数的代码。两者都返回 PDO 对象的实例。但是,当使用 PDO 连接插入语句时,其中一个工作正常,而另一个则没有。在这两种情况下都使用相同的代码来插入记录。
这是其返回的 PDO 对象与插入语句一起使用的函数。
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 对象不适用于插入语句的函数。在这个函数中,连接字符串和其他连接参数是从类中定义的静态值中读取的。
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 并且数据库中没有记录。
我怀疑这与我在代码中声明和使用静态变量的方式有关。谢谢你的帮助。