【问题标题】:I need some help to find an error我需要一些帮助来查找错误
【发布时间】:2017-04-07 19:07:56
【问题描述】:

我创建了一个文件,其中包含一些有用的 PHP 函数来操作 SQL 数据库,但是在 SQL 表中插入记录的代码存在问题。 当我尝试执行此代码时,它会出现:

致命错误:未捕获错误:C:\xampp\htdocs\iterations_php_mysql.php:118 中不支持的操作数类型 堆栈跟踪:#0 C:\xampp\htdocs\prova.php(9): setRecord(Object(mysqli) , 'studenti', Array, Array) #1 {main} 在第 118 行的 C:\xampp\htdocs\iterations_php_mysql.php 中抛出

这是函数($link 是主机获取与$link = mysqli_connect($host, $username); 的链接,$table 是表名,$tableFields 是包含字段名称的数组,$recordFields 是包含新记录字段的数组):

function setRecord($link, $table, $tableFields, $recordFields){

    $sql = "INSERT INTO ".$table." (";

    if(count($tableFields) == count($recordFields)) $n = $tableFields;
    else    return false;

    for($i=0; $i<$n; $i++){

        $sql = $sql . $tableFields[$i];
        if($i != $n-1){   $sql = $sql . ", ";}   //this is the line 118
    }

    $sql = $sql.") VALUES (";

    for($i=0; $i<$n; $i++){

        $sql = $sql.$recordFields[$i];
        if($i != $n-1)   $sql = $sql . ", ";
    }

    $sql = $sql.")";

    return mysqli_query($link, $sql);
}

【问题讨论】:

  • 在返回查询之前回显 $sql 并显示它
  • 回显 $sql
  • 我希望您不会将其与用户提供的数据一起使用。
  • 我强烈建议您将准备好的语句构建到这个通用函数中
  • 这个函数可以简化。你可以有两个参数。表名和键值数组作为第二个参数。

标签: php mysql mysqli


【解决方案1】:
$n = $tableFields

所以我猜 $tableFields 是一个数组?

如果是这样,那么对数组执行以下操作是没有意义的:

if ($i != $n-1) ...

因为你不能对这样的数组进行算术运算。这样做会更好:

if ($i != count($n)-2) ...

请注意,您必须减去 2,因为数组从索引 0 开始。

但我有一个更好的建议来简化您的代码:

而不是所有这些:

for($i=0; $i<$n; $i++){
    $sql = $sql . $tableFields[$i];
    if($i != $n-1){   $sql = $sql . ", ";}   //this is the line 118
}

这样写:

$sql .= implode(", ", $tableFields);

【讨论】:

    【解决方案2】:

    您插入的值必须在引号中更改行

    $sql = $sql.$recordFields[$i];
    

    $sql = $sql."'".$recordFields[$i]."'";
    

    【讨论】:

    • 除非它们是整数,否则这也无法解决错误。
    • @chris85 - 你有一个 PHP 异常,这将修复一个由字符串周围缺少引号引起的查询错误。 billkarwin 有正确的答案。
    猜你喜欢
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    相关资源
    最近更新 更多