Tutorial de PHP: operar la base de datos MySQL y ejecutar sentencias SQL

Directorio de base de datos de operación PHP-MySQL

Ejecutar un único directorio de sentencias SQL
directorio MySQLi
# 面对对象
$sql = "CREATE DATABASE myDB";
if ($conn->query($sql) === TRUE) {
    echo "数据库创建成功";
} else {
    echo "Error creating database: " . $conn->error;
}

# 面对过程
$sql = "CREATE DATABASE myDB"; # 设置操作数据库操作命令
if (mysqli_query($conn, $sql)) {
    echo "数据库创建成功";
} else {
    echo "Error creating database: " . mysqli_error($conn);
}
directorio DOP
try {
    $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);

    // 设置 PDO 错误模式为异常
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    $sql = "CREATE DATABASE myDBPDO"; # 设置操作数据库操作命令

    // 使用 exec() ,因为没有结果返回
    $conn->exec($sql);

    echo "数据库创建成功<br>";
} 

Para obtener más comandos de operación de MySQL, vaya a Notas de introducción a SQL

Ejecutar múltiples directorios de sentencias SQL
Directorio de métodos comunes
  • MySQLi

La función mysqli_multi_query() se puede utilizar para ejecutar múltiples declaraciones SQL.

# 面对对象
$conn->multi_query($sql)
# 面对过程
mysqli_multi_query($conn, $sql)
  • DOP
// 开始事务
$conn->beginTransaction();
// SQL 语句
$conn->exec("INSERT INTO MyGuests (firstname, lastname, email) VALUES ('John', 'Doe', '[email protected]')");
$conn->exec("INSERT INTO MyGuests (firstname, lastname, email) VALUES ('Mary', 'Moe', '[email protected]')");
$conn->exec("INSERT INTO MyGuests (firstname, lastname, email) VALUES ('Julie', 'Dooley', '[email protected]')");
 
// 提交事务
$conn->commit();
Usar directorios de declaraciones preparadas

Las declaraciones preparadas son muy útiles para prevenir la inyección de MySQL.

Las declaraciones preparadas se utilizan para ejecutar varias declaraciones SQL idénticas de manera más eficiente.

Las declaraciones preparadas funcionan de la siguiente manera:

  • Preprocesamiento: cree plantillas de declaraciones SQL y envíelas a la base de datos. Los valores reservados están marcados con el parámetro "?"
INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
  • Análisis de bases de datos, compilación, optimización de consultas en plantillas de declaraciones SQL y almacenamiento de resultados sin salida.
  • Ejecución: finalmente, el valor vinculado a la aplicación se pasa al parámetro ("?") y la base de datos ejecuta la declaración. La aplicación puede ejecutar la declaración varias veces si los valores de los parámetros son diferentes.

En comparación con la ejecución directa de sentencias SQL, las sentencias preparadas tienen dos ventajas principales:

  • Las declaraciones preparadas reducen en gran medida el tiempo de análisis, ya que solo se realiza una consulta (aunque la declaración se ejecuta varias veces).
  • Los parámetros vinculantes reducen el ancho de banda del servidor; solo necesita enviar los parámetros de la consulta en lugar de la declaración completa.
  • Las declaraciones preparadas son muy útiles para la inyección SQL porque se utilizan diferentes protocolos después de enviar los valores de los parámetros, lo que garantiza la validez de los datos.
directorio MySQLi
$sql = "INSERT INTO MyGuests(firstname, lastname, email)  VALUES(?, ?, ?)";
 
// 为 mysqli_stmt_prepare() 初始化 statement 对象
$stmt = mysqli_stmt_init($conn);
 
//预处理语句
if (mysqli_stmt_prepare($stmt, $sql)) {
	// 绑定参数
	mysqli_stmt_bind_param($stmt, 'sss', $firstname, $lastname, $email);
 
	// 设置参数并执行
	$firstname = 'John';
	$lastname = 'Doe';
	$email = '[email protected]';
	mysqli_stmt_execute($stmt);
 
	$firstname = 'Mary';
	$lastname = 'Moe';
	$email = '[email protected]';
	mysqli_stmt_execute($stmt);
 
	$firstname = 'Julie';
	$lastname = 'Dooley';
	$email = '[email protected]';
	mysqli_stmt_execute($stmt);
	
	$stmt->close();
	$conn->close();
}

Otra forma de escribir preprocesamiento y enlace:

$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);

Preste atención a la vinculación de parámetros.

mysqli_stmt_bind_param($stmt, 'sss', $firstname, $lastname, $email);

Esta función vincula la consulta de parámetros y pasa los parámetros a la base de datos. El segundo parámetro es "sss" que muestra el tipo de parámetro:

  • yo - entero
  • d - número de coma flotante de doble precisión
  • s - cuerda
  • b - valor booleano

Cada parámetro debe especificar un tipo para garantizar la seguridad de los datos. El juicio de tipos puede reducir el riesgo de vulnerabilidades de inyección SQL.

directorio DOP
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // 设置 PDO 错误模式为异常
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 
    // 预处理 SQL 并绑定参数
    $stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) 
    VALUES (:firstname, :lastname, :email)");
    $stmt->bindParam(':firstname', $firstname);
    $stmt->bindParam(':lastname', $lastname);
    $stmt->bindParam(':email', $email);
 
    // 插入行
    $firstname = "John";
    $lastname = "Doe";
    $email = "[email protected]";
    $stmt->execute();
 
    // 插入其他行
    $firstname = "Mary";
    $lastname = "Moe";
    $email = "[email protected]";
    $stmt->execute();
 
    // 插入其他行
    $firstname = "Julie";
    $lastname = "Dooley";
    $email = "[email protected]";
    $stmt->execute();
 
    echo "新记录插入成功";
}
catch(PDOException $e)
{
    echo "Error: " . $e->getMessage();
}
$conn = null;
?>

Supongo que te gusta

Origin blog.csdn.net/a772304419/article/details/133397562
Recomendado
Clasificación