0

PDO ステートメントから返される値で問題が発生しています。

これは私のコードです:

//Execute test
$this->checkConnect();
$stmt = $this->dbh->prepare("SELECT p_id FROM People WHERE lastName = :param1 AND firstName = :param2");
$stmt->bindParam(':param1', $this->lName);
$stmt->bindParam(':param2', $this->fName);
$stmt->execute();
$count = $stmt->rowCount();

//Determine value of test
if($count == FALSE)
{
    return FALSE;
}
else
{
    $dummyvar = $stmt->fetch();
    $this->p_id = implode($dummyvar);
}

データベース レコードを調べていたときに、特定の値が入力した値からずれていることに気付きました。p_idクエリを実行すると、 from the tableの値を取得することになっていますPeople。十分に単純です。ただし、何が起こるかというと、数値がそれ自体に 2 回追加されます。たとえば、p_id1this->p_idに等しいとします。11 に等しくなります。またはp_id、2 に等しい場合、出力は 22 になります。MySQL 内でこのクエリを実行しましたが、値は正しいです。私のphpコードで何が起こっているのかわかりません。もしかして内破とか関係あるの?わからない。

どんな洞察も高く評価されます。

追加: が一意であることも述べておく必要p_idがあるため、返される値は 1 つだけです。

4

1 に答える 1

0

まず、あなたの fetch ステートメントは、あなたが思っているものを返していません。デフォルトの出力配列には、次のような列名キーと数値キーの両方が含まれます。

array(
    0 => 1,
    'pid' => 1,
)

おそらく、数値でインデックス付けされた配列だけを取得したいでしょう。PDO::FETCH_NUM次のように使用します。

$dummyvar = $stmt->fetch(PDO::FETCH_NUM);

次に、複数のフィールドを出力する場合 (この場合は明らかにそうではありません)、implode ステートメントを修正する必要があります。異なる配列値の間にどの文字を配置するかを指定する必要があります。

$this->p_id = implode(' ', $dummyvar);

例えば:

echo implode( ', ', array('a', 'b', 'c') );
> 'a, b, c'

参考文献:

于 2012-11-04T06:37:12.160 に答える