【发布时间】:2015-02-26 10:51:07
【问题描述】:
我正在尝试创建一个页面,允许用户使用 PDO 在 sql 数据库中更改他们的信息。我是新手,我遇到了一个错误。我将其用作来源:http://forums.devshed.com/php-faqs-stickies-167/program-basic-secure-login-system-using-php-mysql-891201.html
我不确定我是否包含了太多代码。我希望有人能指出我在哪里犯了错误。
<?php
require("common.php");
Common 运行这段代码:
<?php
$username = "";
$password = "";
$host = "";
$dbname = "";
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
try
{
$db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options);
}
catch(PDOException $ex)
{
die("Failed to connect to the database: " . $ex->getMessage());
}
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
header('Content-Type: text/html; charset=utf-8');
session_start();
现在我创建初始查询和参数:
//initial query and params
$query = "
UPDATE users
SET
";
$query_params = array();
$query_params[':user_id'] = $_SESSION['user']['id'];
现在我想使用参数数组(字段)来定义参数
$params = array(info1,info2,info3);
foreach($params as $param):
if(!empty($_POST[$param])){
$query_params[':$param'] = $_POST[$param];
$query .= "$param = :$param,";
}
endforeach;
然后我完成查询并运行它:
//trim last comma
$query = rtrim($query, ',');
$query .= "
WHERE
id = :user_id
";
try
{
// Execute the query
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
die("Failed to run main query: " . $ex->getMessage() . "\n" . $query );
}
这是我使用的 HTML(带有 jquery):
<form method="post" action="edit_account.php" data-ajax="false">
<div class="ui-field-contain">
<p>Gebruikersnaam: <b><?php echo htmlentities($_SESSION['user']['username'], ENT_QUOTES, 'UTF-8'); ?></b></p>
<label for="email">E-mail:</label>
<input autocomplete="off" type="text" name="email" id="email" value="<?php echo htmlentities($_SESSION['user']['email'], ENT_QUOTES, 'UTF-8'); ?>">
<label for="password">Wachtwoord:</label>
<input autocomplete="off" type="password" name="password" id="password" placeholder="(alleen als je deze wijzigt)">
</div>
<div class="ui-field-contain">
<label for="info1">info1:</label>
<input type="text" name="info1" id="info1" placeholder="<?php echo htmlentities($_SESSION['user']['info1'], ENT_QUOTES, 'UTF-8'); ?>">
</div>
<div class="ui-field-contain">
<label for="info2">info2:</label>
<textarea type="text" name="info2" id="info2" placeholder="<?php echo htmlentities($_SESSION['user']['info2'], ENT_QUOTES, 'UTF-8'); ?>"></textarea>
<label for="info3">info3:</label>
<input type="text" name="info3" id="info3" placeholder="<?php echo htmlentities($_SESSION['user']['info3'], ENT_QUOTES, 'UTF-8'); ?>">
<label for="info4">info4:</label>
<input type="text" name="info4" id="info4" placeholder="<?php echo htmlentities($_SESSION['user']['info4'], ENT_QUOTES, 'UTF-8'); ?>">
</div>
</form>
我收到此错误:SQLSTATE[HY093]: Invalid parameter number: parameter was not defined.
【问题讨论】: