gpt4 book ai didi

php - SQLi 保护用户输入文本

转载 作者:行者123 更新时间:2023-11-29 22:17:46 26 4
gpt4 key购买 nike

我通常会进行手动 SQLI 参数检查(即检查输入是否是有效的电子邮件)。

虽然在这种情况下,我需要将用户消息放入我的数据库

这将如何运作?

我尝试了这段代码,但整个输入以某种方式被删除了。

<?php

$text = "Hello World";

echo "$text is now ";

$text = stripslashes($text);
$text = mysqli_real_escape_string($text);

echo $text;

?>

谢谢!

最佳答案

防止 PHP 中的 SQL 注入(inject):

您可以使用以下任何一种方式来实现此目的:

  1. 对于 MySQLi (MySQL):

    $stmt = $dbConnection->prepare('SELECT id, username, email_id FROM users WHERE type = ?');
    $stmt->bind_param('s', $userType); // bind parameters
    $stmt->execute();

    $result = $stmt->get_result();
    while ($row = $result->fetch_assoc()) {
    // do something with $row
    }

    注意:对于 MySQLi,可以使用过程样式或 Object oriented style (推荐)

  2. 对于 PDO (PDO 是任何受支持的数据库驱动程序的通用解决方案):

    $stmt = $this->db->prepare('SELECT id, username, email_id FROM users WHERE type =:user_type');
    $stmt->bindValue(':user_type', $userType);
    $stmt->execute();
    $user_list = $stmt->fetchAll(PDO::FETCH_ASSOC);

    foreach ($user_list as $key => $list) {
    echo '<a href="'. $list['id'].'">' . $list['email_id']. '</a></br>';
    }

PDO 连接

try {
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
foreach($dbh->query('SELECT * from users') as $row) {
print_r($row);
}
$dbh = null;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}

还有 mysqli 的链接参数,例如

$text = $db->mysqli_real_escape_string($text);

示例:

//Escaping characters
$db->real_escape_string('This is an unescaped "string"');
//There is an alias function that you can use which is shorter and less to type:
$db->escape_string('This is an unescape "string"');

关于php - SQLi 保护用户输入文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31046656/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com