PHP PDO 更新 - 需要参数和无效的参数号

标签 php mysql pdo error-handling sql-update

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

免责声明:我们 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."; ?>

中频我们正在使用这种方法:
$pdo->execute(array($query));

我们得到这个错误代码:

Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in



中频我们改用这个:
$pdo->execute($query);

我们得到这个错误代码:

Warning: PDOStatement::execute() expects parameter 1 to be array, string given in



我们已经在这个问题上停留了很长一段时间,并且不知道如何解决这个问题,所以任何帮助都非常受欢迎。

注意:我们正在使用表单来尝试执行此操作,表单如下所示:
<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>

最佳答案

Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in



您没有绑定(bind)您在查询中提供的任何占位符
BranchU=:Branch

在你的束缚中,你有
$pdo->bindParam(':BranchU', $_POST['Branch'], PDO::PARAM_INT);

请注意 :Branch不等于 :BranchU所以你需要删除所有 U s 在 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.";
    ?>

关于PHP PDO 更新 - 需要参数和无效的参数号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43341736/

相关文章:

php json_encode 不转义新行

PHP MYSQL。如何根据另一个表中的2个不同ID从一个表中检索相同的数据

Mysql:与 json_extract 一起使用时,where in 不返回任何行

Php PDO 请求从派生表列的总和中获取数据

php - PDO::prepare() 不转义 SQL 中的特殊字符

php - 使用 PHP 的 cURL lib 中的 POST 不发送

php mysql游标

python - 想要向现有表中添加一对一的列

php - 减少 MySql 数据库的响应时间

php - TinyMVC PDO 层在数据库查询时引发错误