Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP插入错误_Php_Mysql - Fatal编程技术网

PHP插入错误

PHP插入错误,php,mysql,Php,Mysql,我开始学习从HTML、CSS和php开始编码。我创建了一个基本表单来测试我的技能。然而,我被这件事困住了。你能帮我吗 我知道它对SQL注入是开放的,我只是在努力改进自己的编码,并将在现实生活中使用准备好的语句和参数化查询 <?php if ($_SERVER["REQUEST_METHOD"] == "POST") { $mysql_host = ""; $mysql_username = ""; $mysql_password = ""; $mysql

我开始学习从HTML、CSS和php开始编码。我创建了一个基本表单来测试我的技能。然而,我被这件事困住了。你能帮我吗

我知道它对SQL注入是开放的,我只是在努力改进自己的编码,并将在现实生活中使用准备好的语句和参数化查询

<?php

if ($_SERVER["REQUEST_METHOD"] == "POST") {

    $mysql_host = "";
    $mysql_username = "";
    $mysql_password = "";
    $mysql_database = "";

    $conn = new mysqli ($mysql_host, $mysql_username, $mysql_password, $mysql_database);

    $c_name = $_POST["club_name"]; 
    $c_league = $_POST["league"];
    $c_rank = $_POST["ranking"];
    $c_prank = $_POST["previous_rank"];

    $sql = "INSERT INTO `club_data` (`club_name`, `league`, `ranking`, `previous_rank`)
    VALUES ('$c_name', '$c_league, $c_rank, $c_prank);";
    mysqli_query($conn, $sql); 

    if ($conn->query($sql) === TRUE) {
        echo "kayit islendi";
    }
    else {
        echo "Error". $sql ."<br>". $conn->error;
    }
    $conn->close();
}
?>

您应该使用准备好的语句。它不仅可以防止SQL注入攻击,还可以避免您当前面临的令人讨厌的引用问题

$sql = "INSERT INTO `club_data` (`club_name`, `league`, `ranking`, `previous_rank`)
VALUES (?, ?, ?, ?);";

$result = $conn->prepare($sql);
$result->bind_param('ssss', $c_name, $c_league, $c_rank, $c_prank);
echo $result->execute() === true ? 'kayit islendi' : 'Error'.$conn->error; 

你应该使用事先准备好的陈述。它不仅可以防止SQL注入攻击,还可以避免您当前面临的令人讨厌的引用问题

$sql = "INSERT INTO `club_data` (`club_name`, `league`, `ranking`, `previous_rank`)
VALUES (?, ?, ?, ?);";

$result = $conn->prepare($sql);
$result->bind_param('ssss', $c_name, $c_league, $c_rank, $c_prank);
echo $result->execute() === true ? 'kayit islendi' : 'Error'.$conn->error; 

插入值周围缺少引号,下面是固定的sql:

$sql = "INSERT INTO `club_data` (`club_name`, `league`, `ranking`, `previous_rank`)
VALUES ('$c_name', '$c_league', '$c_rank', '$c_prank');"
每个值都缺少引号

然而,这是在生产中进行数据库查询的一种不明智的方法。可以使用
mysqli\u real\u escape\u string
清理字符串(每个变量都需要此处理),也可以使用准备好的语句

或者,您应该始终通过PDO包装器使用DB。在本例中,您将使用:
PDO::quote
。PDO为最流行的数据库提供了统一的接口。在这里,您可以阅读有关PDO的更多信息:

编码人员更喜欢准备好的语句,而不是对输入进行消毒。然而,这需要与mysql服务器进行额外的通信,而不是用php编写更多的代码。准备好的语句比普通的查询更复杂,因为它们被缓存在SQL server上,并在等待使用数据时进行预处理,同时带有少量问号会使代码很难阅读,特别是当您开始在生产环境中工作并且要填充大量列时。在这里,您可以阅读有关准备好的声明的更多信息:

主要外卖:

  • 永远不要将未初始化的数据保存到数据库!!根据情况,使用
    mysqli\u real\u escape\u string
    PDO::quote
    或准备好的语句
  • 将准备好的语句用于创建它们的目的,而不仅仅是作为一个批发消毒剂工具,在需要重复执行同一查询时使用它们。特别是如果这个查询不是一个insert,在这种情况下,我建议您像这样大量插入:
    插入tbl_name(a,b,c)值(1,2,3),(4,5,6),(7,8,9)此处阅读更多:这里有一个警告,即带有插入值的sql的最大大小不应大于
    max\u allowed\u数据包
    config

插入值周围缺少引号,下面是固定的sql:

$sql = "INSERT INTO `club_data` (`club_name`, `league`, `ranking`, `previous_rank`)
VALUES ('$c_name', '$c_league', '$c_rank', '$c_prank');"
每个值都缺少引号

然而,这是在生产中进行数据库查询的一种不明智的方法。可以使用
mysqli\u real\u escape\u string
清理字符串(每个变量都需要此处理),也可以使用准备好的语句

或者,您应该始终通过PDO包装器使用DB。在本例中,您将使用:
PDO::quote
。PDO为最流行的数据库提供了统一的接口。在这里,您可以阅读有关PDO的更多信息:

编码人员更喜欢准备好的语句,而不是对输入进行消毒。然而,这需要与mysql服务器进行额外的通信,而不是用php编写更多的代码。准备好的语句比普通的查询更复杂,因为它们被缓存在SQL server上,并在等待使用数据时进行预处理,同时带有少量问号会使代码很难阅读,特别是当您开始在生产环境中工作并且要填充大量列时。在这里,您可以阅读有关准备好的声明的更多信息:

主要外卖:

  • 永远不要将未初始化的数据保存到数据库!!根据情况,使用
    mysqli\u real\u escape\u string
    PDO::quote
    或准备好的语句
  • 将准备好的语句用于创建它们的目的,而不仅仅是作为一个批发消毒剂工具,在需要重复执行同一查询时使用它们。特别是如果这个查询不是一个insert,在这种情况下,我建议您像这样大量插入:
    插入tbl_name(a,b,c)值(1,2,3),(4,5,6),(7,8,9)此处阅读更多:这里有一个警告,即带有插入值的sql的最大大小不应大于
    max\u allowed\u数据包
    config

您可以接受SQL注入!!这是一个巨大的安全风险!不要在实际应用程序中使用您的代码!!那么,你犯了什么错误?另外,请仔细查看
$sql
中的查询,您的引号有问题。请不要将用户提供的数据像这样放入sql查询中。“永远使用!”阿瓦伊斯菲亚兹我们都曾经是初学者,我们(希望)都希望有更多的人告诉我们如何避免灾难。如果你看到一个新司机驾驶时没有手在方向盘上,希望你能说点什么。这也是同样的问题。
“$c_name”、$c_league、$c_rank、$c_恶作剧”
请查看您的报价。更好的是,使用一个准备好的语句,您就不必考虑查询中的引号。您可以接受SQL注入!!这是一个巨大的安全风险!不要在实际应用程序中使用您的代码!!那么,你犯了什么错误?另外,请仔细查看
$sql
中的查询,您的引号有问题。请不要将用户提供的数据像这样放入sql查询中。“永远使用!”阿瓦伊斯菲亚兹我们都曾经是初学者,我们(希望)都希望有更多的人告诉我们如何避免灾难。如果你看到一个新司机驾驶时没有手在方向盘上,希望你能说点什么。这也是同样的问题。
“$c_name”、$c_league、$c_rank、$c_恶作剧”
请查看您的报价。更好的是,使用一个事先准备好的声明,你就不必考虑你在查询中的引用。你确实在这里涵盖了很多内容,这也是我投赞成票的原因,但遗漏了一些大家都忽略了的东西。我在他们的帖子下发了这篇文章。你确实在这里做了很多报道,这就是为什么我投了更高的票,但错过了一些