【问题标题】:PHP, MYSQL --> SELECT * directly after INSERT INTO statementPHP, MYSQL --> SELECT * 直接在 INSERT INTO 语句之后
【发布时间】:2015-03-15 16:37:33
【问题描述】:

我想在表中插入一些数据,然后直接从该表中检索所有数据。但奇怪的是,当我这样做时会出错。

所以我的问题是,是否可以构建一个函数,通过 $_POST 插入一些数据,然后直接从表中检索所有数据,包括新插入的 $_POST 数据?

错误:

注意:未定义变量:第 293 行 /mnt/webr/c3/76/54476376/htdocs/includes/functions.php 中的 mysqli 致命错误:在 /mnt/webr/ 中调用一个成员函数 prepare() on null c3/76/54476376/htdocs/includes/functions.php 第 293 行

/**********************************************************************************************************************************

2. Customer new ******************************************************************************************************************

***********************************************************************************************************************************/

function customer_new($user_name) {

    //DB settings
     include_once "config/config_fl.php" ;
           $query_insert = ("INSERT INTO customers (user_name               , 
                                                    customer_name               ,
                                                                              customer_legal_sort         ,
                                                                            customer_vat_applicable ,
                                                                            customer_payment_terms  ,
                                                                            customer_contactperson  ,
                                                                            customer_email          ,
                                                                            customer_telphone       ,
                                                                            customer_address_visit  ,
                                                                            customer_number_visit   ,
                                                                            customer_num_add_visit  ,
                                                                            customer_postal_visit   ,
                                                                            customer_city_visit     ,
                                                                            customer_country_visit  ,
                                                                            customer_visit_vs_post  ,
                                                                            customer_address_post     ,
                                                                            customer_number_post      ,
                                                                            customer_num_add_post       ,
                                                                            customer_postal_post    ,
                                                                            customer_city_post      ,
                                                                            customer_country_post   ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");

          $stmt = $mysqli->prepare($query_insert);
          $stmt->bind_param("sssssssssissssssissss",  $user_name                        ,
                                                                            $_POST['customer_name']           ,
                                                                            $_POST['customer_legal_sort']     ,
                                                                            $_POST['customer_vat_applicable'] ,
                                                                            $_POST['customer_payment_terms']  ,
                                                                            $_POST['customer_contactperson']  ,
                                                                            $_POST['customer_email']          ,
                                                                            $_POST['customer_telphone']       ,
                                                                            $_POST['customer_address_visit']  ,
                                                                            $_POST['customer_number_visit']   ,
                                                                            $_POST['customer_num_add_visit']  ,
                                                                            $_POST['customer_postal_visit']   ,
                                                                            $_POST['customer_city_visit']     ,
                                                                            $_POST['customer_country_visit']  ,
                                                                            $_POST['customer_visit_vs_post']  ,
                                                                            $_POST['customer_address_post']   ,
                                                                            $_POST['customer_number_post']    ,
                                                                            $_POST['customer_num_add_post']   ,
                                                                            $_POST['customer_postal_post']    ,
                                                                            $_POST['customer_city_post']      ,
                                                                            $_POST['customer_country_post']   );
          $stmt->execute();
          $stmt->store_result();
   }



/**********************************************************************************************************************************

3. Customer info ******************************************************************************************************************

***********************************************************************************************************************************/

function customer_info($user_name) {
  unset($mysqli);
  //DB settings
  include_once "config/config_fl.php" ;

  $query_select = ("SELECT * FROM customers where user_name = ? ");
  $stmt = $mysqli->prepare($query_select);
  $stmt->bind_param("s", $user_name);
  $stmt->execute();
  $stmt->store_result();
  $count = $stmt->num_rows();

   $stmt->bind_result ($customer_number         ,
                       $user_name               , 
                       $customer_name               ,
                       $customer_legal_sort       ,
                       $customer_vat_applicable ,
                       $customer_payment_terms  ,
                       $customer_contactperson  ,
                       $customer_email          ,
                       $customer_telphone       ,
                       $customer_address_visit  ,
                       $customer_number_visit   ,
                       $customer_num_add_visit  ,
                       $customer_postal_visit   ,
                       $customer_city_visit     ,
                       $customer_country_visit  ,
                       $customer_visit_vs_post  ,
                       $customer_address_post     ,
                       $customer_number_post      ,
                       $customer_num_add_post       ,
                       $customer_postal_post    ,
                       $customer_city_post      ,
                       $customer_country_post   ); 


      $stmt->fetch();

    //  $customer_data=array();


      $customer_data = array ( 'customer_number'        =>$customer_number         ,
                               'user_name'              =>$user_name               , 
                               'customer_name'          =>$customer_name                 ,
                               'customer_legal_sort'    =>$customer_legal_sort       ,
                               'customer_vat_applicable'=>$customer_vat_applicable ,
                               'customer_payment_terms '=>$customer_payment_terms    ,
                               'customer_contactperson' =>$customer_contactperson  ,
                               'customer_email'         =>$customer_email          ,
                               'customer_telphone'      =>$customer_telphone         ,
                               'customer_address_visit' =>$customer_address_visit  ,
                               'customer_number_visit'  =>$customer_number_visit     ,
                               'customer_num_add_visit' =>$customer_num_add_visit    ,
                               'customer_postal_visit'  =>$customer_postal_visit   ,
                               'customer_city_visit'    =>$customer_city_visit     ,
                               'customer_country_visit' =>$customer_country_visit    ,
                               'customer_visit_vs_post' =>$customer_visit_vs_post    ,
                               'customer_address_post'  =>$customer_address_post     ,
                               'customer_number_post'   =>$customer_number_post    ,
                               'customer_num_add_post'  =>$customer_num_add_post     ,
                               'customer_postal_post'   =>$customer_postal_post    ,
                               'customer_city_post'     =>$customer_city_post      ,
                               'customer_country_post'  =>$customer_country_post   ); 

  $stmt->close();
  $mysqli->close();
  return $customer_data; 

}

【问题讨论】:

  • 也许用您尝试过的代码和收到的错误更新您的问题
  • 只需将标头重定向到已查询 SELECT 的同一文件。
  • Fred -ii- 你的意思是来自 INSERT 语句函数部分的标题 RETURN 吗?
  • 在成功插入/更新时,在查询后添加标题。或者,您可以在函数之外添加查询选择以显示现有数据,同时在成功插入/更新/删除时使用标题,然后将显示新添加的帖子。
  • Doesnt worl: ation - 已经发送的标头(输出开始于 (...)

标签: php mysqli


【解决方案1】:

我认为问题在于你不能执行多个mysqli_execute 而不释放它们中的每一个的结果。 也许您应该尝试,而不是 $stmt->close() 和 $stmt->free_result(),看看是否可行。 无论如何,我建议你总是打印 mysqli 错误,看看什么是不工作的。

<?php
include_once "config/config_fl.php" ;
function customer_new($user_name) {
   global $mysqli;

    $query_insert = ("INSERT INTO customers (
                        user_name               , 
                        customer_name               ,
                        customer_legal_sort         ,
                        customer_vat_applicable ,
                        customer_payment_terms  ,
                        customer_contactperson  ,
                        customer_email          ,
                        customer_telphone       ,
                        customer_address_visit  ,
                        customer_number_visit   ,
                        customer_num_add_visit  ,
                        customer_postal_visit   ,
                        customer_city_visit     ,
                        customer_country_visit  ,
                        customer_visit_vs_post  ,
                        customer_address_post     ,
                        customer_number_post      ,
                        customer_num_add_post       ,
                        customer_postal_post    ,
                        customer_city_post      ,
                        customer_country_post   
                    ) VALUES (
                        ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
                    )"
    );

    $stmt = $mysqli->prepare($query_insert);
    $stmt->bind_param("sssssssssissssssissss",  $user_name                        ,
        $_POST['customer_name']           ,
        $_POST['customer_legal_sort']     ,
        $_POST['customer_vat_applicable'] ,
        $_POST['customer_payment_terms']  ,
        $_POST['customer_contactperson']  ,
        $_POST['customer_email']          ,
        $_POST['customer_telphone']       ,
        $_POST['customer_address_visit']  ,
        $_POST['customer_number_visit']   ,
        $_POST['customer_num_add_visit']  ,
        $_POST['customer_postal_visit']   ,
        $_POST['customer_city_visit']     ,
        $_POST['customer_country_visit']  ,
        $_POST['customer_visit_vs_post']  ,
        $_POST['customer_address_post']   ,
        $_POST['customer_number_post']    ,
        $_POST['customer_num_add_post']   ,
        $_POST['customer_postal_post']    ,
        $_POST['customer_city_post']      ,
        $_POST['customer_country_post']   );
    $stmt->execute();

    // You don't need to store result
    $stmt->free_result();
}

function customer_info($user_name) {
 global $mysqli;
//No sense of unsetting mysqli variable

$query_select = ("SELECT  customer_number, customer_name, customer_legal_sort, custom_var_applicable, ... FROM customers where user_name = ? ");
$stmt = $mysqli->prepare($query_select);
$stmt->bind_param("s", $user_name);
$stmt->execute();
$stmt->store_result();
$count = $stmt->num_rows();

// You must specify what columns are you selecting to fetch them, or it won't work

$stmt->bind_result ($customer_number         ,
        $user_name               , 
        $customer_name               ,
        $customer_legal_sort       ,
        $customer_vat_applicable ,
        $customer_payment_terms  ,
        $customer_contactperson  ,
        $customer_email          ,
        $customer_telphone       ,
        $customer_address_visit  ,
        $customer_number_visit   ,
        $customer_num_add_visit  ,
        $customer_postal_visit   ,
        $customer_city_visit     ,
        $customer_country_visit  ,
        $customer_visit_vs_post  ,
        $customer_address_post     ,
        $customer_number_post      ,
        $customer_num_add_post       ,
        $customer_postal_post    ,
        $customer_city_post      ,
        $customer_country_post   ); 

while($stmt->fetch()) {
    $customer_data = array ( 
            'customer_number'        =>$customer_number         ,
            'user_name'              =>$user_name               , 
            'customer_name'          =>$customer_name                 ,
            'customer_legal_sort'    =>$customer_legal_sort       ,
            'customer_vat_applicable'=>$customer_vat_applicable ,
            'customer_payment_terms '=>$customer_payment_terms    ,
            'customer_contactperson' =>$customer_contactperson  ,
            'customer_email'         =>$customer_email          ,
            'customer_telphone'      =>$customer_telphone         ,
            'customer_address_visit' =>$customer_address_visit  ,
            'customer_number_visit'  =>$customer_number_visit     ,
            'customer_num_add_visit' =>$customer_num_add_visit    ,
            'customer_postal_visit'  =>$customer_postal_visit   ,
            'customer_city_visit'    =>$customer_city_visit     ,
            'customer_country_visit' =>$customer_country_visit    ,
            'customer_visit_vs_post' =>$customer_visit_vs_post    ,
            'customer_address_post'  =>$customer_address_post     ,
            'customer_number_post'   =>$customer_number_post    ,
            'customer_num_add_post'  =>$customer_num_add_post     ,
            'customer_postal_post'   =>$customer_postal_post    ,
            'customer_city_post'     =>$customer_city_post      ,
            'customer_country_post'  =>$customer_country_post   
    ); 
}
$stmt->free_result();
return $customer_data; 

}

您不需要在函数中包含您的 PHP 文件,您只能在文件开头包含一次,只需记住将 $mysqli 变量称为 global(如您所见)。 在插入查询之后,您正在存储结果,但这没有任何意义,因为您不需要从SQL INSERT 获取任何数据,可能只是插入一些行或只是检查语句是否已完成,但是,这两个范围中的每一个都不需要store_result()。

另一件事,在您的customer_info 函数中,您将绑定来自SQL SELECT 的结果,它返回表中的所有列。要使用bind_result() 函数,您需要指定需要哪些列,因此您将使用这样的 SELECT:

SELECT col1,col2,col3 FROM tablename WHERE col1=?

然后:

$stmt->bind_result(col1,col2,col3);

P.S:也许您应该尝试查看您的语句所抛出的确切 mysqli_error,那些 undefined 错误永远不会有太大帮助。 最后一件事,您正在执行许多mysqli 函数而不检查任何内容,例如mysqli_execute 是否有效,或类似的东西。这可以帮助你更多,而不是像链一样使用所有功能

【讨论】:

  • 谢谢,但没有解决:注意:未定义的变量:/mnt/webr/c3/76/54476376/htdocs/includes/functions.php 中的 mysqli 在第 297 行致命错误:调用第 297 行 /mnt/webr/c3/76/54476376/htdocs/includes/functions.php 中 null 的成员函数 prepare()
  • Its so strange. It work when no update is triggered. But when i first insert a new row, and afterwards directly SELECT * then $MYSQLI doesnt 不再存在。你能再看看吗?非常感谢提前
  • 事实上,mysqli close 会关闭连接,因此您的 $mysqli 变量将不再可用。一切都完成后,您应该运行该函数
  • 好的,我明白了,但是请看原帖,我现在从我离开 close() 函数的地方创建了两个函数。但是 $MYSQLI 仍然消失了
  • 谢谢伙计,更新的答案修复了它。问题与Global $MYSQLI´ variable.. A very big thanks for your suppert here, and we´ve a working script here! But....whats 处理“全球”事物有关吗?我不要t understand why you cant 调用两次?
【解决方案2】:

回答您的问题:是的,可以先向表中插入一行,然后使用 SELECT 检索它。我认为,您的脚本失败是因为您在 INSERT 之后关闭了 mysql 连接。

还有一些需要考虑的事情:

【讨论】:

    猜你喜欢
    • 2011-12-04
    • 2021-07-02
    • 2012-04-07
    • 1970-01-01
    • 2012-10-08
    • 2010-12-15
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    相关资源
    最近更新 更多