我一直在试图解决与代码似乎已被弃用的问题相关的问题。
使用Vikram Vaswani的“PHP:A Beginner's Guide”中的示例,目标是验证并正确地从用户的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
我无法在上面的代码中找到任何错误。非常感谢您提供的任何帮助。
答案 0 :(得分:2)
我认为你的主要问题是这一行:
if ($toDo->prepare(exec($sql) == TRUE)) {
exec()
是用于运行命令行程序的PHP函数。我认为你真正想要的是调用PDOStatement::execute
方法。
请参阅手册以正确使用PDO::prepare
: