多重通知:调用函数时出现未定义的变量错误[重复]
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
不存在。确保您传递了正确的变量名。
另外,$conn
在Insertdata()
上下文中是未知的,您必须将此变量也作为参数传递或将其设为全局变量。
另外,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);
?>
【讨论】:
以上是关于多重通知:调用函数时出现未定义的变量错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章