我正在编写一个基本的CRUD应用程序来了解PHP
。我对以下代码究竟是做什么感到有些困惑。我理解它的一般概念,但我不是100%肯定正在进行的逻辑。
我希望有人可以帮助我更好地理解它?
这是我的剧本
<?php
//Establish connection to db
require_once 'includes/db.php';
//Array for validation
$errors = array();
//Sanitize the fields to ensure db integrity.
$title = filter_input(INPUT_POST, 'title', FILTER_SANITIZE_STRING);
$release_date = filter_input(INPUT_POST, 'release_date', FILTER_SANITIZE_NUMBER_INT);
$publisher = filter_input(INPUT_POST, 'publisher', FILTER_SANITIZE_STRING);
$system = filter_input(INPUT_POST, 'system', FILTER_SANITIZE_STRING);
$rating = filter_input(INPUT_POST, 'rating', FILTER_SANITIZE_NUMBER_INT);
$num_players = filter_input(INPUT_POST, 'num_players', FILTER_SANITIZE_NUMBER_INT);
if($_SERVER['REQUEST_METHOD']=='POST'){
//Validate the form
if(empty($title)){
$errors['title'] = true;
}
if(empty($release_date)){
$errors['release_date'] = true;
}
if(empty($publisher)){
$errors['publisher'] = true;
}
if(empty($system)){
$errors['system'] = true;
}
if(empty($rating)){
$errors['rating'] = true;
}
if(empty($num_players)){
$errors['num_players'] = true;
}
//If no errors
if(empty($errors)){
//Build SQL Statement
$sql = $db->prepare("INSERT INTO videogames SET title = :title, release_date = :release_date, publisher = :publisher, system = :system, rating = :rating, num_players = :num_players");
//Bind values
$sql -> bindValue(':title', $title, PDO::PARAM_STR);
$sql -> bindValue(':release_date', $release_date, PDO::PARAM_STR);
$sql -> bindValue(':publisher', $publisher, PDO::PARAM_STR);
$sql -> bindValue(':system', $system, PDO::PARAM_STR);
$sql -> bindValue(':rating', $rating, PDO::PARAM_INT);
$sql -> bindValue(':num_players', $num_players, PDO::PARAM_INT);
//Execute SQL
$sql -> execute();
//Redirect back to homepage
header('Location: index.php');
exit();
}
}
?>
我对这行代码的作用感到有些困惑:
$title = filter_input(INPUT_POST, 'title', FILTER_SANITIZE_STRING);
是否将表单输入字段中的值分配给$title
变量?
这一行:
$sql -> bindValue(':title', $title, PDO::PARAM_STR);
我在文档中读到了这个
将值绑定到相应的命名或问号占位符 用于准备语句的SQL语句。
如果我将数据存储在$title
变量中,那么还有另一种方法来准备我的SQL
语句吗?
我很感激任何帮助,因为我正在努力扩展我对PHP的了解。非常感谢!
答案 0 :(得分:1)
我对这行代码的作用感到有些困惑:
$title = filter_input(INPUT_POST, 'title', FILTER_SANITIZE_STRING);
是否将表单输入字段中的值赋给$ title变量?
是
filter_input
was introduced in PHP 5。这行代码正在做的是抓取输入变量($_POST['title']
),然后在其上应用SANITIZE
method,即; “剥离标签,可选择剥离或编码特殊字符。”
这一行:
$sql -> bindValue(':title', $title, PDO::PARAM_STR);
如果我已经存储了$ title变量中的数据,那么还有另一种方法来准备我的SQL语句吗?
我实际上并不理解这个问题,但我会尽我所能。
这是一个PDO
method,用于将值绑定到准备好的查询。实际上,它是这样做的:
您可以在此处详细了解有关准备和装订的信息:http://use-the-index-luke.com/sql/where-clause/bind-parameters
您可以prepare
查询的另一种方式是使用mysqli
,但逻辑是相同的。
这个问题是在一年前提出来的。我没有恢复它,OP编辑了他的问题,它被撞了。无论问题的年龄如何,如果OP仍然对答案表示兴趣(通过碰撞),我认为回答问题并没有错。