【问题标题】:Errors In PHP codePHP代码中的错误
【发布时间】:2014-09-27 17:52:45
【问题描述】:

我是第一次做 PHP 编码。我收到以下错误:

错误:

警告:mysqli_real_escape_string() 期望参数 1 为 mysqli, 第 9 行 C:\xampp\htdocs\331002.php 中给出的布尔值

警告:mysqli_real_escape_string() 期望参数 1 为 mysqli, 第 10 行 C:\xampp\htdocs\331002.php 中给出的布尔值

警告:mysqli_real_escape_string() 期望参数 1 为 mysqli, 第 11 行 C:\xampp\htdocs\331002.php 中给出的布尔值

注意:未定义索引:empID in C:\xampp\htdocs\331002.php 上线 12

警告:mysqli_real_escape_string() 期望参数 1 为 mysqli, 第 12 行 C:\xampp\htdocs\331002.php 中给出的布尔值

警告:mysqli_query() 期望参数 1 为 mysqli,布尔值 在第 17 行的 C:\xampp\htdocs\331002.php 中给出

警告:mysqli_error() 期望参数 1 为 mysqli,布尔值 在第 18 行的 C:\xampp\htdocs\331002.php 中给出

这是我的代码:

<?php
$con=mysqli_connect("localhost","root","root","student");
// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

// escape variables for security
$FName = mysqli_real_escape_string($con, $_POST['firstName']);
$LName = mysqli_real_escape_string($con, $_POST['lastName']);
$Salary = mysqli_real_escape_string($con, $_POST['salary']);
$ID = mysqli_real_escape_string($con, $_POST['empID']);

$sql="INSERT INTO PersonInfo (FName, LName, empID, Salary)
VALUES ('$FName', '$LName','$ID','$Salary')";

if (!mysqli_query($con,$sql)) {
  die('Error: ' . mysqli_error($con));
}
echo "1 record added";

mysqli_close($con);
?>

【问题讨论】:

  • 我猜 mysqli_connect() 正在返回错误状态(这是一个布尔值,而不是 mysqli 对象)。您可以通过 $con = mysqli_connect("localhost","root","root","student") or die("Connection error: " . mysqli_error($con)); 轻松测试
  • 你在建立mysqli对象($con)时出错

标签: php mysql apache mysqli


【解决方案1】:

通常的“检查连接”模式如下:

<?php
$con=mysqli_connect("localhost","root","root","student");
// Check connection
if (false === $con) {
  // die will "finish" the script
  die("Failed to connect to MySQL: " . mysqli_connect_error());
}

mysqli_real_escape_string 需要一个有效的连接,而您似乎没有。

【讨论】:

    【解决方案2】:

    该消息清楚地告诉您mysqli_real_escape_string 的第一个参数是布尔数据类型。如果您不知道数据类型之间的差异,我建议您查找它们,了解它们对于使用任何语言进行编程都是必不可少的。如果您查看文档,您会看到它需要“由 mysqli_connect() 或 mysqli_init() 返回的链接标识符”。

    你的mysqli_connect()调用返回false,你想找出原因并在它返回false时处理这种情况。估计是连接错误。

    在 php 手册的页面上甚至有一个示例显示:

    $mysqli = new mysqli("localhost", "my_user", "my_password", "world");
    
    /* check connection */
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }
    

    【讨论】:

      【解决方案3】:

      您的问题在于脚本的顶部:

      $con=mysqli_connect("localhost","root","root","student");
      // Check connection
      if (mysqli_connect_errno()) {
          echo "Failed to connect to MySQL: " . mysqli_connect_error();
      }
      
      // escape variables for security
      $FName = mysqli_real_escape_string($con, $_POST['firstName']);
      

      您已经检查了 mysqli 连接,但如果出现连接错误,您的脚本只会回显它并继续执行。如果出现连接错误,脚本应该die,或者至少跳过数据库交互,因为它无法继续数据库事务:

      $con = mysqli_connect("example.com", "user", "password", "database");
      if (mysqli_connect_errno($con)) {
         die("Failed to connect to MySQL: " . mysqli_connect_error());
      }
      

      【讨论】:

        猜你喜欢
        • 2016-04-04
        • 2015-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多