以下は、カスタムクラスの検索シナリオを処理するために設計された関数です。
PDOがデフォルトでパラメータを文字列としてバインドし、適切でない場合でも整数->文字列変換を引き起こすという事実にすでにつまずきました。ご覧のとおり、型が整数かどうかを手動でチェックし、その場合はintの使用を強制することで修正しました。問題は、私の解決策は「開始」値が0の場合にのみ機能することです。これより高いエラーが発生すると、理由がわかりません。開始/カウント値を適切な値に手動で設定した場合(つまり、:countの代わりに{$ count}を使用)、すべてが正常に機能するため、バインディングがまだ混乱しているように見えます。
どのように?または私が間違っている場合...何が正しいのですか?
/*Query is:
SELECT tutor_school.id
FROM tutor_school, tutor_states
WHERE tutor_states.stateName=:state AND tutor_states.id=tutor_school.state
GROUP BY tutor_school.id order by tutor_school.name asc
LIMIT :start, :count*/
$db = Database::get_user_db();
$statement = $db->prepare($query);
foreach ($executeArray as $key => $value)
{
if (getType($value) == 'integer')
{
$statement->bindParam($key, $executeArray[$key], PDO::PARAM_INT);
}
else
{
$statement->bindParam($key, $value);
}
}
var_dump($executeArray);//count and start are still ints
if ($statement->execute())
{
var_dump($executeArray);//start and count are now strings
var_dump($statement->errorInfo());
var_dump($query);
$values = $statement->fetchAll();
$return = array();
foreach ($values as $row)
{
$school = School::schoolWithId($row[0]);
if (!empty($school))
{
$return[] = $school;
}
}
return $return;
}