【问题标题】:SQL Insert Into not workingSQL插入不起作用
【发布时间】:2017-03-02 05:48:44
【问题描述】:

common.php

function connection() {
    $servername = "db********.db.1and1.com";
    $username = "dbo********";
    $password = "********";
    $dbname = "db********";
    $connection = new mysqli($servername, $username, $password, $dbname);
    mysqli_set_charset($connection, "utf8");
    if ($connection->connect_error) {
        die($connection->connect_error);
    } 
}

category.php

include('../model/common.php');
connection();

$name = $_POST["catname"];

$sql = "INSERT INTO `category` (name) VALUES ('".$name."')" ;

if (mysqli_query($connection, $sql)) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . mysqli_error($connection);
}


mysqli_close($connection);

我通过 jQuery ajax 提交表单并返回此错误:

错误:INSERT INTO `category` (name) VALUES ('some test value')

但是,如果我将 connection() 函数的整个代码放在我的查询上方而不包括 common.php 它工作正常!我猜可能存在一些全球性问题。我也尝试过全局 $connection 或使用单例类但没有成功。

【问题讨论】:

  • 先检查你common.php文件是否包含!!
  • @prakashtank 是的,我检查过,它包括
  • 警告:使用mysqli 时,您应该使用parameterized queriesbind_param 将用户数据添加到查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了严重的SQL injection bug切勿$_POST$_GET任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。
  • 请注意,如果您只想坚持使用核心 PHP 和 mysqli,这可能是 PHP 最弱的数据库接口,这是一条艰难的道路。 PHP the Right Way 提供了很多关于解决此问题的更好方法的建议,如果您致力于学习 PHP,也值得探索 development frameworksLaravel 对初学者特别友好,有据可查,并拥有出色的社区支持。有了 Eloquent,您就不必纠结于这样的事情了。
  • 见鬼,即使是 PDO 也是一个非常更好的用于处理数据库查询的 API,并且它内置于

标签: php mysql


【解决方案1】:
  1. 返回$connection

    if ($connection->connect_error) {
      die($connection->connect_error);
    }
    return $connection
    
  2. 分配给新的 $connection 变量

    $connection = connection();
    

【讨论】:

  • `问题解决了,我忘了把函数赋值给一个变量。谢谢
  • 这可能与return 行上的反引号有关,它们不应该存在。
  • @tadman 啊,我错过了那些!在列表中格式化代码并不总是显而易见的。我想 OP 正在尽力而为
  • @Phil 我只是推测这是问题所在,但现在看起来是正确的。很好的修复!
【解决方案2】:

connection() 函数创建上下文或范围。变量只会在函数的持续时间内存在,所以$connection 不会在下面可用。有关变量范围的更多信息,请参阅this thread。一种解决方案是在函数顶部添加global $connection,以允许在connection() 函数之外设置$connection。您可以简单地完全省略该函数,并简单地包含文件以设置该信息。

function connection() {
    global $connection; //Add this line
    $servername = "db********.db.1and1.com";
    $username = "dbo********";
    $password = "********";
    $dbname = "db********";
    $connection = new mysqli($servername, $username, $password, $dbname);
    mysqli_set_charset($connection, "utf8");
    if ($connection->connect_error) {
        die($connection->connect_error);
    } 
}

【讨论】:

  • 如果connection()直接返回$connection会好很多
  • @Phil 苹果和橙子。他可以完全省略该函数,只包含common.php
猜你喜欢
  • 1970-01-01
  • 2013-07-10
  • 2016-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多