【发布时间】:2016-05-21 09:13:55
【问题描述】:
我正在使用 PDO 将值插入到我的表中,如下所示:
$query = "INSERT INTO Maps(meetingId, street, city, code, centerLat, centerLon, zoom, markerVisible, markerLat, markerLon) VALUES (:meetingId, :street, :city, :code, :centerLat, :centerLon, :zoom, :markerVisible, :markerLat, :markerLon)";
$paramArr = array(
":meetingId" => intval($mapInfo['meetingId']),
":street" => $mapInfo['street'],
":city" => $mapInfo['city'],
":code" => $mapInfo['code'],
":zoom" => $mapInfo['zoom'],
":centerLat" => $mapInfo['center']['lat'],
":centerLon" => $mapInfo['center']['lon'],
":markerVisible" => $mapInfo['marker']['visible'],
":markerLat" => $mapInfo['marker']['lat'],
":markerLon" => $mapInfo['marker']['lon']
);
$db = $this->databaseManager ->getDB();
$query = $db->prepare($query);
foreach ($paramsArray as $key => $value) {
$query->bindParam($key, $value, PDO::PARAM_INT);
}
当我执行这个查询时,我得到:
SQLSTATE[23000]:违反完整性约束:1452 无法添加或更新子行:外键约束
meetingId 是外键,但我添加了一个我 100% 确定存在于相关表中的键。此键的类型为 int。
另一方面,如果我删除第一个变量并在其位置输入正确的 id(我再次确定存在)我得到 p>
SQLSTATE[HY000]:一般错误
我错过了什么吗?
【问题讨论】:
-
如果您在执行查询时使用您最喜欢的 mysql 管理器应用程序中的值替换参数,那么您会得到同样的错误吗?您确定将 tge 正确的值替换为 meetingid 参数吗?表中是否还有其他外键?
-
@Shadow,是的,我确定。当我手动进行查询时替换时,一切正常。我还发现,当我直接将 $paramsArray 传递给执行语句(而不是在循环中手动绑定每个参数)时,一切正常。