2017-04-25 96 views
-1

我试图让我的CMS能够编辑不同的字段(例如名称)。当我点击“更新”,不过,我得到以下错误:更新数据库时出现“无效参数号”,为什么?

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens' in /studenthome.hallam.shu.ac.uk/STUDENTHOME10/1/b5035381/public_html/affinity/cms/process/editRecord.php: in /studenthome.hallam.shu.ac.uk/STUDENTHOME10/1/b5035381/public_html/affinity/cms/process/editRecord.php on line 28 PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in /studenthome.hallam.shu.ac.uk/STUDENTHOME10/1/b5035381/public_html/affinity/cms/process/editRecord.php on line 28 Call Stack: 0.0029 659144 1. {main}() /studenthome.hallam.shu.ac.uk/STUDENTHOME10/1/b5035381/public_html/affinity/cms/process/editRecord.php:0 0.0135 672928 2. PDOStatement->execute() /studenthome.hallam.shu.ac.uk/STUDENTHOME10/1/b5035381/public_html/affinity/cms/process/editRecord.php:28

这里是我的代码:

<?php 
ini_set('display_errors', 1); 

// add your includes for connections and functions 
// make sure the path is correct 
require ('../../includes/conn.inc.php'); 
require ('../../includes/functions.inc.php'); 

// sanitize user variables 
$splayerName = safeString($_POST['playerName']); 
$splayerDescription = safeString($_POST['playerDescription']); 
$splayerImage = safeString($_POST['playerImage']); 
$splayerRank = safeString($_POST['playerRank']); 
$splayerSpec = safeString($_POST['playerSpec']); 
$splayerID = safeInt($_POST['playerID']); 

// build prepare statement 
$sql = "UPDATE affinity SET playerName = :playerName, 
playerDescription = :playerDescription, 
playerImage = :playerImage, 
playerRank = :playerRank, 
playerSpec = :playerSpec 
WHERE playerID = :playerID"; 
$stmt = $pdo->prepare($sql); 

$stmt->bindParam(':playerName', $splayerName, PDO::PARAM_STR); 
$stmt->bindParam(':playerDescription', $splayerDescription, PDO::PARAM_STR); 
$stmt->bindParam(':playerImage', $splayerImage, PDO::PARAM_STR); 
$stmt->bindParam(':playerRank', $splayerRank, PDO::PARAM_STR); 
$stmt->bindParam(':playerRank', $splayerRank, PDO::PARAM_STR); 
$stmt->bindParam(':playerSpec', $splayerSpec, PDO::PARAM_INT); 
$stmt->execute(); 

// redirect browser 
header("Location: ../cms.php"); 

// make sure no other code executed 
exit; 
?> 

我不知道为什么,这是行不通的;我该如何解决它?

+1

你绑定5个变量,但使用6个字段。你有两倍的排名 – RST

+0

你不知道什么是错的,因为你不检查代码中的错误。永远不要假设代码总是完美无缺地工作。 –

回答

0

你的playerID绑定在哪里?这是造成它的原因。你有两次绑定秩序和ID从未,他们应该是正确的?

$stmt->bindParam(':playerName', $splayerName, PDO::PARAM_STR); 
$stmt->bindParam(':playerDescription', $splayerDescription, PDO::PARAM_STR); 
$stmt->bindParam(':playerImage', $splayerImage, PDO::PARAM_STR); 
$stmt->bindParam(':playerRank', $splayerRank, PDO::PARAM_STR); 
$stmt->bindParam(':playerSpec', $splayerSpec, PDO::PARAM_INT); 
$stmt->bindParam(':playerID', $splayerID, PDO::PARAM_STR); 
+0

你的权利感谢指出 – unreal1357

0
<?php 
ini_set('display_errors', 1); 

// add your includes for connections and functions 
// make sure the path is correct 

require ('../../includes/conn.inc.php'); 

require ('../../includes/functions.inc.php'); 

// sanitize user variables 

$splayerName = safeString($_POST['playerName']); 
$splayerDescription = safeString($_POST['playerDescription']); 
$splayerImage = safeString($_POST['playerImage']); 
$splayerRank = safeString($_POST['playerRank']); 
$splayerSpec = safeString($_POST['playerSpec']); 
$splayerID = safeInt($_POST['playerID']); 

// build prepare statement 

$sql = "UPDATE affinity SET playerName = :playerName, 
playerDescription = :playerDescription, 
playerImage = :playerImage, 
playerRank = :playerRank, 
playerSpec = :playerSpec 
WHERE playerID = :playerID"; 
$stmt = $pdo->prepare($sql); 
$stmt->bindParam(':playerName', $splayerName, PDO::PARAM_STR); 
$stmt->bindParam(':playerDescription', $splayerDescription, PDO::PARAM_STR); 
$stmt->bindParam(':playerImage', $splayerImage, PDO::PARAM_STR); 
$stmt->bindParam(':playerRank', $splayerRank, PDO::PARAM_STR); 
$stmt->bindParam(':playerSpec', $splayerSpec, PDO::PARAM_STR); 
$stmt->bindParam(':playerID', $splayerID, PDO::PARAM_INT); 
$stmt->execute(); 

// redirect browser 

header("Location: ../cms.php"); 

// make sure no other code executed 

exit; 
?> 
1

:playerRank

已经绑定的2倍和

:playerID

尚未绑定。

和:

:playerSpec

应该绑定为一个字符串,而不是一个int。

$stmt->bindParam(':playerName', $splayerName, PDO::PARAM_STR); 
$stmt->bindParam(':playerDescription', $splayerDescription, PDO::PARAM_STR); 
$stmt->bindParam(':playerImage', $splayerImage, PDO::PARAM_STR); 
$stmt->bindParam(':playerRank', $splayerRank, PDO::PARAM_STR); 
$stmt->bindParam(':playerSpec', $splayerSpec, PDO::PARAM_STR); 
$stmt->bindParam(':playerID', $splayerID, PDO::PARAM_INT); 
相关问题