我正在尝试使用以下内容更新我的表:
$stmt = $db->prepare("
UPDATE Business SET
Business.Name = ?,
Business.Phone = ?,
Business.Fax = ?,
Business.Address = ?,
Business.City = ?,
Business.StateId = ?,
Business.Zip = ?,
Business.Referral = ?,
Business.IsRemindedWeekly = ?,
Business.DeletedOn = ?
WHERE
Business.BusinessId = ?");
// Execute the query
$stmt->execute(array(
$_POST["Name"],
$_POST["Phone"],
$_POST["Fax"],
$_POST["Address"],
$_POST["City"],
$_POST["StateId"],
$_POST["Zip"],
$_POST["Referral"],
$_POST["IsRemindedWeekly"],
($_POST["DeletedOn"] && $_POST["DeletedOn"] != "0000-00-00" ? $_POST["DeletedOn"] : null),
$_POST["BusinessId"]
));
我的架构如下所示:
CREATE TABLE `business` (
`BusinessId` int(11) NOT NULL,
`Name` varchar(255) NOT NULL,
`Phone` char(10) DEFAULT NULL,
`Fax` char(10) DEFAULT NULL,
`Address` varchar(255) DEFAULT NULL,
`City` varchar(64) DEFAULT NULL,
`StateId` int(11) DEFAULT NULL,
`Zip` char(5) DEFAULT NULL,
`Signature` blob DEFAULT NULL,
`Referral` varchar(255) DEFAULT NULL,
`IsRemindedWeekly` bit(1) NOT NULL DEFAULT b'0',
`DeletedOn` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
但是,无论发送到请求的值如何,IsRemittedWeekly 列始终设置为 1。检查网络选项卡时,有效负载似乎正在发送字符串值“1”,但即使我将参数化值更改为:
($_POST["IsRemindedWeekly"] == "1" ? 1 : 0)
(注意非类型比较运算符)但无论如何,更新操作后我的数据库中的值仍然是 1。我错过了什么吗?
更新
我有点不高兴线程被关闭,因为我仍然遇到困难。我已经决定使用bindValue,但它仍然无法正常工作。我试过了:
// Passing a 1 or 0 with PARAM_INT always returns false
$stmt->bindValue(":isRemindedWeekly", ($_POST["IsRemindedWeekly"] == "1" ? 1 : 0), PDO::PARAM_INT);
// Passing a 1 or 0 with PARAM_BOOL always returns false
$stmt->bindValue(":isRemindedWeekly", ($_POST["IsRemindedWeekly"] == "1" ? 1 : 0), PDO::PARAM_BOOL);
// Passing a true or false with PARAM_INT always returns false
$stmt->bindValue(":isRemindedWeekly", $_POST["IsRemindedWeekly"], PDO::PARAM_INT);
// Passing a true or false with a PARAM_BOOL always returns true
$stmt->bindValue(":isRemindedWeekly", $_POST["IsRemindedWeekly"], PDO::PARAM_BOOL);