0

我一直在努力解决与似乎已弃用的代码相关的问题。

使用 Vikram Vaswani 的“PHP:初学者指南”中的示例,目标是验证并正确转义用户 Web 表单中的输入以进入 SQLite 表。我查阅了许多资料,这些资料都指向我使用以下语法:

$todo->prepare($_POST['name'])在一个条件块中,该块将结果分配给一个变量,以便在最终查询中使用以插入到数据库表中。无论我做了什么,我能得到的最好结果都是 NULL。最糟糕的是无法执行查询。

如果这是一个重复的问题,我已阅读手册并道歉,但可能存在与我不知道的 PDO 库相关的 Microsoft Windows 特定问题。我一直无处可去。

表单字段如下:

与日期相关的三个字段:“dd”、“mm”和“yyyy”。

似乎每次都失败的代码如下:

 try {

// If form submitted
// attempt database connection.

$toDo = new PDO('sqlite:todo.db') OR
exit("Could not open database.");

// Check and sanitize input.

$name = !empty($_POST['name']) ? $name = $toDo->prepare($_POST['name']) :
exit('ERROR: Task name is required.');

$dd = !empty($_POST['dd']) ? $dd = (int) $_POST['dd'] :
exit('ERROR: Task due date is required.');

    $mm = !empty($_POST['mm']) ? $mm = (int) $_POST['mm'] :
exit('ERROR: Task due date is required.');

$yyyy = !empty($_POST['yyyy']) ? $yyyy = (int) $_POST['yyyy'] :
exit('ERROR: Task due date is required.');

// Create entry date variable.

$date = checkdate($mm, $dd, $yyyy) ? mktime(0, 0, 0, $mm, $dd, $yyyy) :
exit('ERROR: Task due date is invalid.');

$priority = !empty($_POST['priority']) ?
$priority = $toDo->prepare($_POST['priority']) :
exit('ERROR: Task priority is required.');

// Attempt query execution.
// Add a new record.

$sql = "INSERT INTO tasks (name, due, priority) VALUES
('$name', '$date', '$priority')";

if ($toDo->prepare(exec($sql) == TRUE)) {

     echo "<div id=\"message\">Task record successfully added to database</div>";

}   else {

     echo "ERROR: Could not execute query.";

}

// Close connection to sqlite3.

$toDo = NULL;

 }

 catch(PDOException $e) {

 echo "Exception: " . $e->getMessage();

}   // end catch

我一直无法在上面的代码中找到任何错误。非常感谢您提供的任何帮助。

4

1 回答 1

2

我认为你的主要问题是这一行:

if ($toDo->prepare(exec($sql) == TRUE)) {

exec()是一个用于运行命令行程序的 PHP 函数。我认为您真正想要的是调用该PDOStatement::execute方法。

请参阅手册以正确使用PDO::prepare

http://php.net/manual/en/pdo.prepare.php

于 2013-03-31T02:34:35.067 回答