【问题标题】:PHP PDO Update - Expects Parameter & Invalid Parameter NumberPHP PDO 更新 - 需要参数和无效的参数号
【发布时间】: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-&gt;execute(array($query));更改为$pdo-&gt;execute();
  • @Oskar.K 你必须学会​​接受答案

标签: php mysql pdo error-handling sql-update


【解决方案1】:

警告:PDOStatement::execute(): SQLSTATE[HY093]: 无效参数 number:绑定变量的数量与中的标记数量不匹配

您没有绑定您在查询中提供的任何占位符

BranchU=:Branch

在你的绑定中你有

$pdo->bindParam(':BranchU', $_POST['Branch'], PDO::PARAM_INT);

注意:Branch不等于:BranchU所以你需要删除pindParam()末尾的所有Us

所以你的代码应该是:

<?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(':Branch', $_POST['Branch'], PDO::PARAM_INT);
    $pdo->bindParam(':Ort', $_POST['Ort'], PDO::PARAM_INT);
    $pdo->bindParam(':TypStalle', $_POST['TypStalle'], PDO::PARAM_INT);
    $pdo->bindParam(':Adress', $_POST['Adress'], PDO::PARAM_INT);
    $pdo->bindParam(':KontaktPerson', $_POST['KontaktPerson'], PDO::PARAM_INT);
    $pdo->bindParam(':TelefonNummer1', $_POST['TelefonNummer1'], PDO::PARAM_INT);
    $pdo->bindParam(':DatumAterkomst', $_POST['DatumAterkomst'], PDO::PARAM_INT);
    $pdo->bindParam(':Kommentar', $_POST['Kommentar'], PDO::PARAM_INT);
    $pdo->bindParam(':ForetagsNamn', $_POST['ForetagsNamn'], PDO::PARAM_INT);
    $pdo->execute();
    echo "Records were updated successfully.";
    ?>

【讨论】:

  • 很高兴能帮忙看看how to accept an answer
  • @Oskar.K 你需要感谢一个答案,当它通过接受和投票帮助你时
猜你喜欢
  • 2018-12-01
  • 1970-01-01
  • 2016-05-12
  • 2015-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多