【发布时间】:2014-06-18 14:24:13
【问题描述】:
尽管我多次检查参数,但我仍然收到异常。我将如何清理这个烂摊子并解决错误?
mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement
这是我的代码,基本上它不是那么多代码,而是 33 个变量/参数。它与 INSERT 语句的工作方式相同:
public function update($assetId, $genericAssetId, $umdns, $assetFullName, $manufacturerId, $model, $serialNumber,
$internaliventoryNumber, $locationId, $responsiblePers, $assetStatusId, $assetUtilizationId, $purchaseDate,
$installationDate, $lifeTime, $purchasePrice, $currentValue, $warrantyContractId, $agentId, $warrantyContractExp,
$warrantyContractNotes, $employeeId, $supplierId, $donorId, $serviceManual, $notes, $picture, $lastmodified,
$by_user, $URL_Manual, $metrologyDocument, $metrologyDate, $metrology)
{
$sql = "UPDATE assets SET GenericAssetID = '$genericAssetId', UMDNS = '$umdns', AssetFullName = '$assetFullName',
ManufacturerID = '$manufacturerId', Model = '$model', SerialNumber = '$serialNumber',
InternalIventoryNumber = '$internaliventoryNumber', LocationID = '$locationId',
ResponsiblePers = '$responsiblePers', AssetStatusID = '$assetStatusId',
AssetUtilizationID = '$assetUtilizationId', PurchaseDate = '$purchaseDate',
InstallationDate = '$installationDate', Lifetime = '$lifeTime', PurchasePrice = '$purchasePrice',
CurrentValue = '$currentValue', WarrantyContractID = '$warrantyContractId', AgentID = '$agentId',
WarrantyContractExp = '$warrantyContractExp', WarrantyContractNotes = '$warrantyContractNotes',
EmployeeID = '$employeeId', SupplierID = '$supplierId', DonorID = '$donorId',
ServiceManual = '$serviceManual', Notes = '$notes', Picture = '$picture', lastmodified = '$lastmodified',
by_user = '$by_user', URL_Manual = '$URL_Manual', MetrologyDocument = '$metrologyDocument',
MetrologyDate = '$metrologyDate', Metrology = '$metrology' WHERE AssetID = '$assetId'";
if ($stmt = $this->db->prepare($sql)) {
$stmt->bind_param("siisssssssiissiddisssssssssssssss", $assetId, $genericAssetId, $umdns, $assetFullName,
$manufacturerId, $model, $serialNumber, $internaliventoryNumber, $locationId, $responsiblePers,
$assetStatusId, $assetUtilizationId, $purchaseDate, $installationDate, $lifeTime, $purchasePrice,
$currentValue, $warrantyContractId, $agentId, $warrantyContractExp, $warrantyContractNotes, $employeeId,
$supplierId, $donorId, $serviceManual, $notes, $picture, $lastmodified, $by_user, $URL_Manual,
$metrologyDocument, $metrologyDate, $metrology);
}
$stmt->execute();
$num_affected_rows = $stmt->affected_rows;
$stmt->close();
return $num_affected_rows > 0;
}
【问题讨论】:
-
我不会数这些哈哈
-
所以,我停止计数:D
-
不是答案,而是重新考虑你的方法。 33个参数...
-
将数据对象视为参数,也可能是具有名称到类型映射的数组。
-
嗯,它不是那么漂亮,但它有效。
标签: php mysql sql mysqli prepared-statement