【发布时间】:2017-09-06 14:14:21
【问题描述】:
所以,我和几个朋友正在做这个项目,我们需要解决的一个问题是能够更新数据。
免责声明:我们的 PDO 连接有效,但出于明显的原因在代码 sn-ps 中取出
正在使用的 PHP 代码如下所示:
<?php
$pdo = new PDO();
$pdo->exec("set names utf8");
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
$query= 'UPDATE HTSKund SET BranchU=:Branch, OrtU=:Ort, TypStalleU=:TypStalle, AdressU=:Adress, KontaktPersonU=:KontaktPerson, TelefonNummer1U = :TelefonNummer1, DatumAterkomstU=:DatumAterkomst, KommentarU=:Kommentar WHERE ForetagsNamnU=:ForetagsNamn;';
$pdo = $pdo->prepare($query);
$pdo->bindParam(':BranchU', $_POST['Branch'], PDO::PARAM_INT);
$pdo->bindParam(':OrtU', $_POST['Ort'], PDO::PARAM_INT);
$pdo->bindParam(':TypStalleU', $_POST['TypStalle'], PDO::PARAM_INT);
$pdo->bindParam(':AdressU', $_POST['Adress'], PDO::PARAM_INT);
$pdo->bindParam(':KontaktPersonU', $_POST['KontaktPerson'], PDO::PARAM_INT);
$pdo->bindParam(':TelefonNummer1U', $_POST['TelefonNummer1'], PDO::PARAM_INT);
$pdo->bindParam(':DatumAterkomstU', $_POST['DatumAterkomst'], PDO::PARAM_INT);
$pdo->bindParam(':KommentarU', $_POST['Kommentar'], PDO::PARAM_INT);
$pdo->bindParam(':ForetagsNamnU', $_POST['ForetagsNamn'], PDO::PARAM_INT);
$pdo->execute(array($query));
echo "Records were updated successfully."; ?>
如果我们正在使用这种方法:
$pdo->execute(array($query));
我们得到这个错误代码:
警告:PDOStatement::execute(): SQLSTATE[HY093]: 参数号无效:绑定变量的数量与中的标记数量不匹配
如果我们改用这个:
$pdo->execute($query);
我们得到这个错误代码:
警告:PDOStatement::execute() 期望参数 1 是数组,字符串在
中给出
我们已经在这个问题上停留了很长一段时间,并且不知道如何解决这个问题,因此我们非常感谢任何帮助。
注意:我们正在使用表单来尝试执行此操作,表单如下所示:
<form action="KundSidaU.php" method="post">
Företag:
<select size='1' name='ForetagsNamnU'>
<?php
$pdo = new PDO();
$pdo->exec("set names utf8");
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
foreach($pdo->query('SELECT DISTINCT ForetagsNamn FROM HTSKund') as $row)
{
echo '<option value="'.$row['ForetagsNamn'].'">';
echo $row['ForetagsNamn'];
echo '</option>';
}
?>
</select><br>
Branch:
<select size='1' name='BranchU'>
<?php
$pdo = new PDO();
$pdo->exec("set names utf8");
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
foreach($pdo->query('SELECT DISTINCT Branch FROM HTSKund') as $row)
{
echo '<option value="'.$row['Branch'].'">';
echo $row['Branch'];
echo '</option>';
}
?>
</select><br>
Ort: <input type="text" name="OrtU"/><br>
Typ av ställe: <input type="text" name="TypStalleU"/><br>
Adress: <input type="text" name="AdressU"/><br>
KontaktPerson: <input type="text" name="KontaktPersonU"/><br>
TelefonNummer: <input type="text" name="TelefonNummer1U"/><br>
Återkomstdatum: <input type="text" name="DatumAterkomstU"placeholder='YYYY-MM-DD HH:MM'/><br>
Kommentar: <input type="text" name="KommentarU"/><br>
【问题讨论】:
-
您不需要将任何参数传递给 execute(),因为您已经使用 bindParam() 绑定了参数。这样的调用 $pdo->execute();
-
尝试按照您的建议进行操作,但仍然收到错误“无效的参数编号:未定义参数”
-
确保您从 $_POST 获取所有值。该错误表明您缺少某些参数。
-
将
$pdo->execute(array($query));更改为$pdo->execute(); -
@Oskar.K 你必须学会接受答案
标签: php mysql pdo error-handling sql-update