标签:http 自动 数据 mysqli err image 顺序 连接 guests
连接数据库是第一步,PHP中可以使用mysql_connect()
来连接,注意7.x已弃用该函数,5.x仍可使用,7.x可用mysqli_connect()
。
mysql_connect(servername,username,password);
例子:
<?php
$con = mysql_connect("localhost","root","root");
if (!$con)
{
die(‘Could not connect: ‘ . mysql_error());
}
// some code
mysql_close($con);
?>
PHP脚本结束时,会自动关闭连接,如果需要提前可像例子中使用mysql_close()
提前关闭。
建立连接后,就可以使用mysql_query()
,向 MySQL 连接发送执行的SQL语句。
7.x使用mysqli_query()
。
CREATE DATABASE database_name
mysql_query("CREATE DATABASE my_db",$con)
CREATE TABLE table_name
(
column_name1 data_type,
.......
)
创建名为 "Persons" 的表,此表有三列。列名是 "FirstName", "LastName" 以及 "Age":
mysql_select_db("my_db", $con);
$sql = "CREATE TABLE Persons
(
FirstName varchar(15),
LastName varchar(15),
Age int
)";
mysql_query($sql,$con);
在对某个数据库内的表操作时,必须先用mysql_select_db()选择对应数据库
7.x使用mysqli_select_db()
INSERT INTO table_name VALUES (value1, value2,....)
或INSERT INTO table_name (column1, column2,...) VALUES (value1, value2,....)
SQL语句对大小写不敏感
向 "Persons" 表添加了一个新记录:
mysql_select_db("my_db", $con);
mysql_query("INSERT INTO Persons (FirstName, LastName, Age) VALUES (‘Peter‘, ‘Griffin‘, ‘35‘)");
SELECT column_name(s) FROM table_name
$result
变量中存放由 mysql_query() 函数返回的数据。使用 mysql_fetch_array() 函数以数组的形式从记录集返回第一行。每个随后对 mysql_fetch_array() 函数的调用都会返回记录集中的下一行。mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM Persons");
while($row = mysql_fetch_array($result))
{
echo $row[‘FirstName‘] . " " . $row[‘LastName‘];
echo "<br />";
}
UPDATE table_name SET column_name = new_value WHERE column_name = some_value
mysql_query("UPDATE Persons SET Age = ‘36‘ WHERE FirstName = ‘Peter‘ AND LastName = ‘Griffin‘");
DELETE FROM table_name WHERE column_name = some_value
mysql_query("DELETE FROM Persons WHERE LastName=‘Griffin‘");
SELECT column FROM table WHERE 条件
$result = mysql_query("SELECT * FROM Persons WHERE FirstName=‘Peter‘");
order by 列名/n(n是第n列)
SELECT column_name(s) FROM table_name ORDER BY column_name
$conn = new PDO("mysql:host=$servername;", $username, $password);
$sql = "CREATE DATABASE myDBPDO";
//使用 exec() ,因为没有结果返回,注意,此处并未使用预处理,所以无防注入效果。
$conn->exec($sql);
预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高。
预处理语句的工作原理如下:
INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
简单理解就是,先传递没有参数的语句给数据库解析编译,在传递参数的值给数据库作为参数执行。与传统的拼接语句一步执行相比,预处理是分两步的。此种情况下,即使参数的输入没有过滤,但因为参数在数据库中只作为参数参与SQL语句执行,没有与语句拼接,注入也就无法进行。
相比于直接执行SQL语句,预处理语句有两个主要优点:
实例:
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 预处理及绑定
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);
// 设置参数并执行
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();
$firstname = "Mary";
$lastname = "Moe";
$email = "mary@example.com";
$stmt->execute();
$firstname = "Julie";
$lastname = "Dooley";
$email = "julie@example.com";
$stmt->execute();
echo "新记录插入成功";
$stmt->close();
$conn->close();
?>
解析实例的代码:
INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
在 SQL 语句中,我们使用了问号 (?),在此我们可以将问号替换为整型,字符串,双精度浮点型和布尔值。接下来,让我们来看下 bind_param() 函数:
$stmt->bind_param("sss", $firstname, $lastname, $email);
该函数绑定了 SQL 的参数,且告诉数据库参数的值。 "sss" 参数列处理其余参数的数据类型。s 字符告诉数据库该参数为字符串。
参数有以下四种类型:
i - integer(整型)
d - double(双精度浮点型)
s - string(字符串)
b - BLOB(binary large object:二进制大对象)
每个参数都需要指定类型。
通过告诉数据库参数的数据类型,可以降低 SQL 注入的风险。
总结,预处理语句使用的三个步骤:
$conn->prepare
$stmt->bind_param
$stmt->execute();
标签:http 自动 数据 mysqli err image 顺序 连接 guests
原文地址:https://www.cnblogs.com/Rain99-/p/13262412.html