次のように定義された mySQL テーブルがあります。
CREATE TABLE IF NOT EXISTS `coupons` (
`coupon_id` int(11) NOT NULL auto_increment,
`coupon_code` varchar(50) NOT NULL,
`coupon_expiration_date` date NOT NULL,
`coupon_discount` decimal(10,2) NOT NULL,
`coupon_created_date` date NOT NULL,
PRIMARY KEY (`coupon_id`)
)
このテーブルの 1 つのエントリは次のとおりです。
INSERT INTO `coupons` (`coupon_id`, `coupon_code`, `coupon_expiration_date`, `coupon_discount`, `coupon_created_date`) VALUES (1, 'test', '2012-11-30', '11.00', '2012-10-22');
次の PHP コードを使用してこのテーブルにクエリを実行しようとすると、次のようになります。
$strSelectCoupons = "SELECT coupon_id FROM coupons";
if($stmtSelectCoupons = $mysqlConn->prepare($strSelectCoupons))
{
$stmtSelectCoupons->execute();
$stmtSelectCoupons->bind_result($iCouponId);
while($stmtSelectCoupons->fetch())
{
echo $iCouponId;
}
}
else
{
echo "Prepared statement error: " . $mysqlConn->error;
}
予想どおり、「1」が画面に表示されます。
ただし、次の PHP コードを実行しようとすると:
$strSelectCoupons = "SELECT coupon_id, coupon_code FROM coupons";
if($stmtSelectCoupons = $mysqlConn->prepare($strSelectCoupons))
{
$stmtSelectCoupons->execute();
$stmtSelectCoupons->bind_result($iCouponId, $strCouponCode);
while($stmtSelectCoupons->fetch())
{
echo $iCouponId . "<br />";
echo $strCouponCode . "<br />";
}
}
else
{
echo "Prepared statement error: " . $mysqlConn->error;
}
結果は表示されず、エラーは出力されず、エラーはログに記録されず、ページの残りの部分はレンダリングされません。
実際、これが実際に期待どおりに機能するのは、coupon_id のみを返す場合だけです。たとえば、select ステートメントを変更して Coupon_code のみを返すようにすると、これもページが爆破されます。
これが失敗する原因についてのアイデアはありますか?
アパッチのバージョン: 2.2.2
PHP バージョン: 5.3.14
MySQL バージョン: 5.0.95-コミュニティ
編集:
さらに調査したところ、bind_result は INT 型の列でのみ機能し、別の型の列をバインドしようとすると失敗します。