多重通知:调用函数时出现未定义的变量错误[重复]

Posted

技术标签:

【中文标题】多重通知:调用函数时出现未定义的变量错误[重复]【英文标题】:Multiple Notice: Undefined variable errors when I call a function [duplicate] 【发布时间】:2016-05-05 08:57:30 【问题描述】:

我正在尝试编写一个 php 函数 Insertdata($table,$field,$data) 来插入一些数据。这是我到目前为止所得到的:

插入数据.php

<?php
  include('connection.php');

  function Insertdata($table,$field,$data)

    $field_values= implode(',',$field);
    $data_values=implode(',',$data);

    $sql="INSERT into". " ".$table." ".$field_values. "VALUES(".$data_values.")";
    $result=$conn->query($sql);
  
?>

这个函数的调用发生在另一个页面:

sample.php

<?php
  include('../model/insertdata.php');
  $table="country";
  $field_values=array("country_name","status");
  $data_values=array("usa",'1');
  $sample=Insertdata($table,$field,$data);
  if($result)
  
    echo "inserted";
  
  else
  
    echo "not inseterd";
  
?>

每当我调用上面的函数时,都会抛出以下错误并且没有插入数据:

Notice: Undefined variable: field in /var/www/html/online_test/admin/view/sample.php on line 6
Notice: Undefined variable: data in /var/www/html/online_test/admin/view/sample.php on line 6
Warning: implode(): Invalid arguments passed in /var/www/html/online_test/admin/model/insertdata.php on line 6
Warning: implode(): Invalid arguments passed in /var/www/html/online_test/admin/model/insertdata.php on line 7
INSERT into country VALUES()
Notice: Undefined variable: conn in /var/www/html/online_test/admin/model/insertdata.php on line 10
Fatal error: Call to a member function query() on a non-object in /var/www/html/online_test/admin/model/insertdata.php on line 10

我是 PHP 新手,正在学习中。我需要一些建议如何让它发挥作用。

【问题讨论】:

是的,没有名为$field & $data的字段 似乎从未定义过$field$data。看起来您确实定义了$table$data_values$field_values。错字? 9 人回答,没有一个人提到这个函数是完全危险的,允许任何形式的 SQL 注入 【参考方案1】:

sample.php

$sample=Insertdata($table,$field,$data);

$sample=Insertdata($table,$field_values,$data_values);

这将修复大部分错误,因为sample.php 中未定义$field$data。最后一个错误与 $conn 有关,它可能在connection.php 中定义

【讨论】:

谢谢你我现在改变了它只抛出一个错误调用/var/www/html/online_test/admin/model/insertdata.php 中的非对象上的成员函数查询()第 10 行 那个错误告诉你 $conn 不是一个对象。该问题很可能是范围问题。在最顶部的函数定义内添加global $conn;。如果这不能解决它,那么它是connection.php中的一个错误@ 另外,您的if($result) 必须是if($sample),否则它将始终回显not inserted,因为从未定义过$result(范围问题)。【参考方案2】:

这段代码有很多问题,首先:

$table="country";
$field_values=array("country_name","status");
$data_values=array("usa",'1');
$sample=Insertdata($table,$field,$data);

$field$data 不存在。确保您传递了正确的变量名。

另外,$connInsertdata() 上下文中是未知的,您必须将此变量也作为参数传递或将其设为全局变量。

另外,SQL 语法完全错误。 INSERT into country country_name,statusVALUES(usa,1) 不是有效的 SQL。确保您的查询格式正确,并且您正在过滤 SQL Injection。

例如:

$fields = implode('`, `', $field);
$values = implode("', '", array_map(function ($val) use ($conn)  return $conn->real_escape_string($val); , $data));
$sql = "INSERT INTO `$table` (`$fields`) VALUES ('$values')";

【讨论】:

【参考方案3】:

您只是在调用函数时错误配置了变量。

$table="country";
$field_values=array("country_name","status");
$data_values=array("usa",'1');
$sample=Insertdata($table,$field_values,$data_values);

【讨论】:

【参考方案4】:

你的代码有这么多问题,首先是修改后的代码:

修改功能:

<?
function Insertdata($table,$field,$data)

    $field_values= implode(',',$field);
    $data_values=implode("','",$data);

    $sql= "INSERT INTO $table (".$field_values.") 
    VALUES ('".$data_values."') ";
    $result=$conn->query($sql);

修改函数调用:

$table = "country";
$field = array("country_name","status");
$data = array("usa",'1');
$result = Insertdata($table,$field,$data);
if($result)

    echo "inserted";

else

    echo "not inseterd";

?>

问题:

Insertdata() 函数您正在使用 VALUES 作为简单字符串,您需要在字符串值之间使用引号,否则它将显示如下 VALUES (usa,1) 这应该是 VALUES ('usa','1')VALUES ('usa',1)

你在函数参数$field$data中使用undefined variable,这两个都没有定义,应该是$field_values$data_values

第三,你成功使用了未定义的变量$result,失败条件应该是$sample而不是$result

您收到致命错误,因为您没有在函数参数中使用 $conn,范围有限

【讨论】:

【参考方案5】:

在所有这些答案中,您都遇到了类似的错误,即 1)注意:未定义的变量:conn 2) 警告:mysqli_query() 期望参数 1 为 mysqli,null 这两个错误来避免他们试试这个:

功能:

<?php 
function Insertdata($table,$field,$data,$conn)

    $field_values= implode(",",$field);
    $data_values=implode(",",$data); 

    $sql= "INSERT INTO $table (".$field_values.") VALUES (".$data_values.")";
    $result=$conn->query($sql);

if($result)
    echo "inserted";
 else 
    echo "not inseterd";

?>

函数调用:

<?php 
$table = "country";
$field = array("country_name","status");
$data = array("'usa'","'1'");
$result = Insertdata($table,$field,$data,$conn);

?>

使用此代码可以避免这两个错误。

【讨论】:

【参考方案6】:
    function InsertRecordToTable($tableName='',$fieldNames='')
    
        $fields  = implode(',', array_keys($fieldNames));
        $values  = implode(',', mysqli_escape_string(array_values($fieldNames)));
        $insertQuery = "INSERT INTO ".$tableName.'('.$fields.') Values '.'('.$values.')';
    

通过参数尝试这个函数示例

$field['FirstName'] = 'Manoj';
$field['LastName'] = 'Kiran';
$field['Age'] = '21';
Insertrecord('testtable',$field);

插入记录正常

【讨论】:

【参考方案7】:

试试这个:

<?php
   $conn = mysqli_connect('localhost','root','','kailash');


   $table = "country";

   $field = array("country_name","status");
   $data = array("usa",'1');

   $field_values= implode(',',$field); 
   $data_values = implode("','",$data);

   $sql = "INSERT INTO $table($field_values)VALUES('$data_values')";
   $result = $conn->query($sql);
?>

【讨论】:

以上是关于多重通知:调用函数时出现未定义的变量错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 node-sass 编译 SCSS 时出现未定义变量错误

尝试在 React 中更改状态时出现未定义的错误

在ruby中编译时出现未定义的方法错误

使用 sql into 时出现未声明的变量错误

注册时出现未定义的方法错误

运行生成脚手架命令时出现未定义的方法“组”错误