私はPHPを初めて使いました。私はこの問題の解決策をどこからでも探し求めましたが、何もそれを分類していません。このようないくつかの質問がスタックに似ていますが、私はソリューションを適切に実装しているかどうか混乱しています。それは別の問題です。私は、問題の洞察があるかどうかを知りたい。別のクラスのデータベースにアクセスする必要がありますが、エラーが発生しました。致命的なエラー:40行目のdemo.phpにある非オブジェクトのメンバー関数prepare()を呼び出してください。エラーは、私はデータベースのインスタンスを取得していないです__construct機能でdemo.phpデータベースアクセスをラップするクラスに関する問題PHP GAE
<?php
class Demo {
private $conn;
function __construct() {
require_once dirname(__FILE__) . '/include/db_connect.php';
// opening db connection
$db = new DbConnect();
$this->conn = $db->connect();
}
public function getAllChatRooms() {
$stmt = $this->conn->prepare("SELECT * FROM chat_rooms");
$stmt->execute();
$tasks = $stmt->get_result();
$stmt->close();
return $tasks;
}
public function getAllUsers() {
$stmt = $this->conn->prepare("SELECT * FROM users");
$stmt->execute();
$tasks = $stmt->get_result();
$stmt->close();
return $tasks;
}
public function getDemoUser() {
$name = 'Joe Bloggs';
$email = '[email protected]';
*Error
40 ->* $stmt = $this->conn->prepare("SELECT user_id from users WHERE email = ?");
$stmt->bind_param("s", $email);
$stmt->execute();
$stmt->store_result();
$num_rows = $stmt->num_rows;
if ($num_rows > 0) {
$stmt->bind_result($user_id);
$stmt->fetch();
return $user_id;
} else {
$stmt = $this->conn->prepare("INSERT INTO users(name, email) values(?, ?)");
$stmt->bind_param("ss", $name, $email);
$result = $stmt->execute();
$user_id = $stmt->insert_id;
$stmt->close();
return $user_id;
}
}
}
?>
でから来ると$に代入されるのはここに私db_connect.php
<?php
class DbConnect {
function __construct() {
}
/**
* Establishing database connection
* @return database connection handler
*/
function connect() {
$db = null;
if (isset($_SERVER['SERVER_SOFTWARE']) &&
strpos($_SERVER['SERVER_SOFTWARE'], 'Google App Engine') !== false) {
// Connect from App Engine.
try{
$db = new pdo('mysql:unix_socket=/cloudsql/projectid:instance;dbname=guestbook', 'root', 'password');
}catch(PDOException $ex) {
die('Unable to connect.');
}
}
$db = null;
}
}
?>
はこちらですコネクト?これが正しいかどうかわかりません。 mysqliがpdoの代わりに動作するかどうかを確認するためにDBConnectを変更しましたが、何も修正されませんでした。誰かがこれについて少しの光を放つことができるなら、私は非常に感謝します。
編集:
私は私が探していますどのような言い換えます。私はpdoの問題を回避できるように、SQLでmysqliをGoogle App Engineに接続する方法があるかどうかを知りたいと思います。 pdoはデータベースへの接続時にのみ使用され、mysqliに変更することができれば、pdoでサポートされていないbind_paramなどのメソッドを変更することなくdemo.phpと通信できるはずです。正しい?もしpdoで動作するようdemo.phpを更新する簡単な方法があれば、私はそれを行うことも同様ですが、pdoがどのようなメソッドをサポートしているのかわからず、PHP全体を知りません。コーディングの観点からは、最も簡単なオプションは何ですか?mysqliをGAEで使用することは可能ですか、それともpdoでなければなりませんか? GAEがmysqliをサポートしていない場合、誰かがdemo.phpの関数を更新する方法を教えてください。
ありがとうございました。
シンプルグーグル:
はあなたのconnect関数の最後にreturn文を追加し、問題を解決するには検索ではこれで十分でした: 異なる接続インターフェイスでの作業 Google Cloud SQLは、共通接続を使用するPHPからの接続をサポートしていますPDO_MySQL、mysqli、およびMySQL APIなど、さまざまな種類があります。 PDO_MySQL、mysqli、およびMySQL APIは、App Engine、開発環境(ローカル)、または本番環境(デプロイ済みApp Engineアプリケーション)でデフォルトで有効になっています。 – peuh
あなたの編集に関しては、http://php.net/manual/en/mysqli.construct.phpをチェックしてください。pdoを使用する代わりにmysqlを使用する代わりにconnectメソッドのコードを変更するだけです... – peuh
私はあなたの答えをマークしました正解、ありがとうございます –