ローカルファイルをオンラインで移行していて、dbスクリプトでPHPの問題が発生しています。ローカルで正常に動作しますが(PHP 5.3.8を実行)、サーバーで次のエラーが発生します(PHP 5.3.10)
$ DBH-> setAttribute(PDO :: ATTR_ERRMODE、PDO :: ERRMODE_EXCEPTION);なし
致命的なエラー:108行目の/.../...php内の非オブジェクトでメンバー関数setFetchMode()を呼び出す
$ DBH-> setAttribute(PDO :: ATTR_ERRMODE、PDO :: ERRMODE_EXCEPTION);を使用します。
SQLSTATE [42000]:構文エラーまたはアクセス違反:1142SELECTコマンドがユーザー'...' @ '205.186.180.26' fortable'invited'に対して拒否されました
これが私のコードです:
class guest {
public $id;
public $guest_name;
public $url_phrase;
}
$guest = new guest;
if (isset($_GET['p'])) {
$url_phrase = urldecode($_GET['p']);
} else if (isset($_POST['p'])) {
$url_phrase = urldecode($_POST['p']);
}
if (isset($url_phrase)) {
try {
$DBH = new PDO("mysql:host=myhost.com;dbname=mydbname", "myusername", "mypassword");
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$url_phrase = $DBH->quote($url_phrase);
$sql = "SELECT id, guest_name, url_phrase FROM mydbname.invited WHERE url_phrase = $url_phrase";
$stmt = $DBH->query($sql);
$stmt->setFetchMode(PDO::FETCH_INTO, new guest);
$guestNumber = $stmt->rowCount();
if($guestNumber > 0) {
etc...
}
if($guestType == "solo") {
foreach($stmt as $guest) {
$name = $guest->guest_name;
etc...
}
}
} else {
other stuff.. etc..
$DBH = null;
} catch (PDOException $e) {
echo $e->getMessage();
}
}
このユーザーとして正常に機能する単純なselectステートメントを取得しました(パーミッションに関連しているとは思いません)。私の問題は、PDOの実装にあるようです。このエラーを取り除くにはどうすればよいですか?私はこれを台無しにしている奇妙な方法でステートメントを準備/実行していますか?助けてくれてありがとう