2017-04-11 85 views
-2

所以,我和幾個朋友正在做這個項目,我們需要解決的一個問題是能夠更新數據。PHP PDO更新 - 預計參數和無效參數

免責聲明:我們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對象::執行():SQLSTATE [HY093]:無效的參數編號:綁定變量的數目不

IF我們用這個代替匹配的令牌數量:

$pdo->execute($query); 

我們得到這個錯誤代碼:

警告: PDOStatement對象::執行()預計參數1是數組,字符串中

我們一直停留在這個相當長的一段時間現在給出對如何解決這一問題,因此任何幫助是非常appriciated沒有真正的線索。

注:我們使用的是形式,試圖執行此,並且形式如下所示:

<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> 
+0

你不需要傳遞任何參數來執行(),因爲你已經綁定了e參數使用bindParam()。這樣的調用$ pdo-> execute(); –

+0

嘗試按照您的建議進行操作,但仍出現錯誤 「無效的參數編號:參數未定義」 –

+0

確保您從$ _POST獲取所有值。錯誤提示您缺少一些參數。 –

回答

0

警告:PDOStatement對象::執行():SQLSTATE [HY093]:無效參數 號:綁定變量的數目不

匹配的令牌數你沒有綁定任何你在查詢中提供的佔位符

BranchU=:Branch 

而在你綁定你有

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

注意:Branch不等於:BranchU所以你需要在的pindParam()

年底將所有的U這麼說,你的代碼應該是:

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

那肯定有竅門,非常感謝你! –

+0

酷高興可以幫助看到[如何接受答案](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) –

+0

@ Oskar.K你需要欣賞當它通過接受和投票來幫助你的時候回答 –