PHP使用函数插入数据?

时间:2016-01-28 05:52:09

标签: php mysql function mysqli

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

insertdata.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新手,也是学习过程中的新手。我需要一些建议如何让这个工作。

8 个答案:

答案 0 :(得分:2)

sample.php更改

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

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

将解决大部分错误,$field$data未在sample.php中定义。最后的错误与$ conn有关,这可能是connection.php

中定义的

答案 1 :(得分: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}')";

答案 2 :(得分:1)

您的代码中存在很多问题,首先是修改后的代码:

修改功能:

<?
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')或{ {1}}。

  • 您在函数参数VALUES ('usa',1)undefined variable中使用了$field,两者都没有定义,这应该是$data$field_values

  • 第三,您正在使用未定义的变量$data_values,失败条件应为$result而不是$sample

  • 由于您未在函数参数中使用$result,范围有限,您将收到致命错误

答案 3 :(得分:0)

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

?>

<?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);
  }
?>

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

在所有这些答案中,您都遇到了类似的错误,即 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 :(得分:0)

    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 :(得分:-2)

尝试一下:

<?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);
?>