-1

私は一生、PDO クエリで動作するようにバインドすることはできません。常に false を返します。

この例では、フィールドの値が他の 2 つの値の間にあることを確認します。

これは機能します:

$query = $db->query("SELECT * FROM table WHERE field1 > '$start' AND field1 < '$finish'");

これはしません:

$query = $db->query("SELECT * FROM table WHERE field1 > :start AND field1 < :finish");
$query->bindParam(":start", $start);
$query->bindParam(":finish", $finish);

更新: 上記のクエリは、ヘルプのおかげで機能するようになりました。以下はまだありません。

ここでさまざまな PDO の投稿を調べましたが、解決策が見つかりませんでした。他に何を試すべきかわかりません。

更新 2: わかりました、$db が見つからないため、接続せずに false を返しているようです。$db 接続行は、すべてのメイン ページで必要な connect.php ファイルにあります。これらのページのコンテンツは、関連するファイル/ページを含む関数によって呼び出されます。PDO は関数内で単独では機能しないため、クエリを含むファイルをインクルードする関数によって $db が失われますか? 私は自分自身を十分に明確に説明していないかもしれません。

基本的に、functions.php の関数の例:

function getRegistration() {
    include("registration.php");
}

main.php

require_once("connect.php");
require_once("functions.php");

getRegistration();

registration.php には以下が含まれます。

$sql = $db->prepare("INSERT INTO tempus_members(username, email, password, activation_code, registration_date, registered_ip, name) VALUES(:username, :email, :password, :activation_code, :registration_date, :registered_ip, :name)");
$sql->bindParam(":username", $username);
$sql->bindParam(":email", $email);
$sql->bindParam(":password", $hash);
$sql->bindParam(":activation_code", $activation_code);
$sql->bindParam(":registration_date", $registration_date);
$sql->bindParam(":registered_ip", $registered_ip);
$sql->bindParam(":name", $name);
$sql->execute();

ページを含める関数によって $db 変数が失われていますか? もしそうなら、どうすれば $db をすべての関数に通すことができますか?

4

1 に答える 1

3

試す:

$stmt = $db->prepare("SELECT * FROM table WHERE field1 > :start AND field1 < :finish");
$stmt->bindParam(":start", $start);
$stmt->bindParam(":finish", $finish);
$stmt->execute();

PDO::prepareの代わりにPDO::queryを使用していました。

他のクエリについては、どのようなエラーが返されますか? 次のコードを試して、ページにエラーが吐き出されるかどうかを確認してください。

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

try{
    $sql = $db->prepare("INSERT INTO tempus_members(username, email, password, activation_code, registration_date, registered_ip, name) VALUES(:username, :email, :password, :activation_code, :registration_date, :registered_ip, :name)");

    $sql->bindParam(":username", $username);
    $sql->bindParam(":email", $email);
    $sql->bindParam(":password", $hash);
    $sql->bindParam(":activation_code", $activation_code);
    $sql->bindParam(":registration_date", $registration_date);
    $sql->bindParam(":registered_ip", $registered_ip);
    $sql->bindParam(":name", $name);

    $sql->execute();

}
catch(PDOException $e){
    echo $e->getMessage();
}
于 2013-01-23T15:56:36.627 に答える