ここでは、2つの関数のコードを共有しています。どちらも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>';
}
}
2番目の関数を使用すると、PDOオブジェクトは正常に作成されますが、挿入は失敗します。エラーは表示されませんが、カウントは0で、DBにレコードがありません。
これは、コードで静的変数を宣言して使用する方法に関係しているのではないかと思います。ご協力いただきありがとうございます。