我一直在努力解决与似乎已弃用的代码相关的问题。
使用 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
我一直无法在上面的代码中找到任何错误。非常感谢您提供的任何帮助。