我有一个 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`)
)
此表中的一项如下:
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-community
编辑:
在进一步调查中,bind_result 仅适用于 INT 类型的列,并在尝试绑定其他类型的任何列时失败。