PHP PDO更新 - 预期参数&参数号无效

时间:2017-04-11 09:19:42

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

所以,我和几个朋友在做这个项目,我们需要解决的一个问题就是能够更新数据。

免责声明:我们的PDO连接有效,但由于显而易见的原因而在代码段中被删除

正在使用的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."; ?>

IF 我们正在使用此方法:

$pdo->execute(array($query));

我们收到此错误代码:

  

警告:PDOStatement :: execute():SQLSTATE [HY093]:参数号无效:绑定变量数与

中的令牌数不匹配

IF 我们正在使用此代码:

$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>

1 个答案:

答案 0 :(得分:0)

  

警告:PDOStatement :: execute():SQLSTATE [HY093]:参数无效   number:绑定变量的数量与

中的标记数不匹配

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

BranchU=:Branch

在你的绑定中你有

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

请注意:Branch不等于:BranchU,因此您需要删除U

末尾的所有pindParam()

所以你的代码应该是:

<?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.";
    ?>