哪种方法更好地编写插入数据的 PHP 代码
Which is better way for write PHP code for insert data
我有些困惑,因为有些人写 PHP 这样的代码来上传数据。
但是我的导师总是使用 $query
和 $link
从 SQL 上传和检索数据。
<?php
include 'connection.php';
function reg_in() {
if (isset($_POST['submit'])) {
$name = $_POST['name'];
$email = $_POST['email'];
$mob = $_POST['mobile'];
$check_in = $_POST['in'];
$check_out = $_POST['out'];
$rm = $_POST['room'];
$room_type = $_POST['type'];
// Problem start from here
if (mysql_query("INSERT INTO `book` (`name`,`email`,`mobile_no`,`check_in`,`check_out`,`room`,`room_type`) VALUES ('$name','$email','$mob','$check_in','$check_out','$rm','$room_type')")) {
header('Location: C:/wamp/www/project/payment.html');
} else {
echo mysql_error();
}
}
}
if (isset($_POST['submit'])) {
reg_in();
//echo ' succesfully inserted';
} else {
echo 'Not book';
}
MySQL(我的导师):-
<?php
$link = mysqli_connect("myserver.com", "test", "sunil7117", "test");
if (mysqli_connect_error()) {
die("please give correct permision");
}
//Is both are same!
//$query="INSERT INTO user(email,password) VALUES ('shivanandcpr25@gmail.com','sunil7117')";
$query = "UPDATE user SET email='test@gmail.com' WHERE email='abc@gmail.com' LIMIT 1";
echo mysqli_query($link, $query);
echo "<br>";
$query = "SELECT * FROM user";
if ($result = mysqli_query($link, $query)) {
echo "welcome to database<br>";
$row = mysqli_fetch_array($result);
echo "my E-mail id is <strong> ".$row[1]. "</strong> and passoword is <strong>".$row[2]."</strong>";
}
都没有!
您的第一个示例使用了 PHP 年前已删除的函数。 mysql_query()
不存在,不应再使用。删除它的原因是您应该改用准备好的语句。它们由 mysqli 或 PDO 扩展提供。
你的第二个例子更好,但是太乱了。
- 你不应该
echo mysqli_query
。这个函数没有什么有用的东西可以打印出来。
- 养成一直使用准备语句的习惯,并对变量数据使用占位符。截至目前,您的查询是不变的,但使用准备好的语句仍然是一个很好的做法,以防您稍后需要添加参数。
- 避免使用
mysqli_fetch_array()
等函数。一个一个地迭代结果选项很麻烦而且很少有用。
- 从不检查 mysqli 调用的 return 值。没有用。改为启用错误报告。参见 How to get the error message in MySQLi?
- 始终设置正确的字符集。它应该是
utf8mb4
99% 的时间。
- SQL 查询可以保存在单独的变量中,但有什么意义呢?您只需将它作为参数传递给
query
函数。无需使用中间变量。
- 不要使用mysqli。您应该改用 PDO。如果你必须使用 mysqli,那么为此目的创建一个简单的包装函数或 class 并执行你的通用函数而不是乱用 mysqli 函数。
这是我将如何做的一个例子。首先我为 mysqli 启用错误报告,我打开连接并设置字符集。然后我声明一个函数,它接受 3 个参数和 returns 一个数组。第一个参数是您刚刚打开的数据库连接。其次是您的 SQL 查询和占位符(如果有的话)。第三个是可选的,它是一个值数组,将作为参数绑定到占位符。此函数适用于所有类型的 SQL 查询。其余代码变得非常简单。
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = new mysqli("myserver.com", "test", "sunil7117", "test");
$link->set_charset('utf8mb4'); // always set the charset
/**
* Executes an SQL query on the database.
*
* @param \mysqli $mysqli
* @param string $query e.g. SELECT * FROM users WHERE username=?
* @param array $params An array of parameters to be bound in the given order to the placeholders in SQL
* @return array
*/
function prepared_query(\mysqli $mysqli, string $query, array $params = []): array {
$stmt = $mysqli->prepare($query);
if ($params) {
$stmt->bind_param(str_repeat("s", count($params)), ...$params);
}
$stmt->execute();
if ($result = $stmt->get_result()) {
return $result->fetch_all(MYSQLI_BOTH);
}
return null;
}
prepared_query($link, "UPDATE user SET email='test@gmail.com' WHERE email='abc@gmail.com' LIMIT 1");
echo "<br>";
$result = prepared_query($link, "SELECT * FROM user");
echo "welcome to database<br>";
if ($result) {
$row = $result[0];
echo "my E-mail id is <strong> ".$row[1]. "</strong> and passoword is <strong>".$row[2]."</strong>";
}
我有些困惑,因为有些人写 PHP 这样的代码来上传数据。
但是我的导师总是使用 $query
和 $link
从 SQL 上传和检索数据。
<?php
include 'connection.php';
function reg_in() {
if (isset($_POST['submit'])) {
$name = $_POST['name'];
$email = $_POST['email'];
$mob = $_POST['mobile'];
$check_in = $_POST['in'];
$check_out = $_POST['out'];
$rm = $_POST['room'];
$room_type = $_POST['type'];
// Problem start from here
if (mysql_query("INSERT INTO `book` (`name`,`email`,`mobile_no`,`check_in`,`check_out`,`room`,`room_type`) VALUES ('$name','$email','$mob','$check_in','$check_out','$rm','$room_type')")) {
header('Location: C:/wamp/www/project/payment.html');
} else {
echo mysql_error();
}
}
}
if (isset($_POST['submit'])) {
reg_in();
//echo ' succesfully inserted';
} else {
echo 'Not book';
}
MySQL(我的导师):-
<?php
$link = mysqli_connect("myserver.com", "test", "sunil7117", "test");
if (mysqli_connect_error()) {
die("please give correct permision");
}
//Is both are same!
//$query="INSERT INTO user(email,password) VALUES ('shivanandcpr25@gmail.com','sunil7117')";
$query = "UPDATE user SET email='test@gmail.com' WHERE email='abc@gmail.com' LIMIT 1";
echo mysqli_query($link, $query);
echo "<br>";
$query = "SELECT * FROM user";
if ($result = mysqli_query($link, $query)) {
echo "welcome to database<br>";
$row = mysqli_fetch_array($result);
echo "my E-mail id is <strong> ".$row[1]. "</strong> and passoword is <strong>".$row[2]."</strong>";
}
都没有!
您的第一个示例使用了 PHP 年前已删除的函数。 mysql_query()
不存在,不应再使用。删除它的原因是您应该改用准备好的语句。它们由 mysqli 或 PDO 扩展提供。
你的第二个例子更好,但是太乱了。
- 你不应该
echo mysqli_query
。这个函数没有什么有用的东西可以打印出来。 - 养成一直使用准备语句的习惯,并对变量数据使用占位符。截至目前,您的查询是不变的,但使用准备好的语句仍然是一个很好的做法,以防您稍后需要添加参数。
- 避免使用
mysqli_fetch_array()
等函数。一个一个地迭代结果选项很麻烦而且很少有用。 - 从不检查 mysqli 调用的 return 值。没有用。改为启用错误报告。参见 How to get the error message in MySQLi?
- 始终设置正确的字符集。它应该是
utf8mb4
99% 的时间。 - SQL 查询可以保存在单独的变量中,但有什么意义呢?您只需将它作为参数传递给
query
函数。无需使用中间变量。 - 不要使用mysqli。您应该改用 PDO。如果你必须使用 mysqli,那么为此目的创建一个简单的包装函数或 class 并执行你的通用函数而不是乱用 mysqli 函数。
这是我将如何做的一个例子。首先我为 mysqli 启用错误报告,我打开连接并设置字符集。然后我声明一个函数,它接受 3 个参数和 returns 一个数组。第一个参数是您刚刚打开的数据库连接。其次是您的 SQL 查询和占位符(如果有的话)。第三个是可选的,它是一个值数组,将作为参数绑定到占位符。此函数适用于所有类型的 SQL 查询。其余代码变得非常简单。
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = new mysqli("myserver.com", "test", "sunil7117", "test");
$link->set_charset('utf8mb4'); // always set the charset
/**
* Executes an SQL query on the database.
*
* @param \mysqli $mysqli
* @param string $query e.g. SELECT * FROM users WHERE username=?
* @param array $params An array of parameters to be bound in the given order to the placeholders in SQL
* @return array
*/
function prepared_query(\mysqli $mysqli, string $query, array $params = []): array {
$stmt = $mysqli->prepare($query);
if ($params) {
$stmt->bind_param(str_repeat("s", count($params)), ...$params);
}
$stmt->execute();
if ($result = $stmt->get_result()) {
return $result->fetch_all(MYSQLI_BOTH);
}
return null;
}
prepared_query($link, "UPDATE user SET email='test@gmail.com' WHERE email='abc@gmail.com' LIMIT 1");
echo "<br>";
$result = prepared_query($link, "SELECT * FROM user");
echo "welcome to database<br>";
if ($result) {
$row = $result[0];
echo "my E-mail id is <strong> ".$row[1]. "</strong> and passoword is <strong>".$row[2]."</strong>";
}