php中使用mysql_stmt(預先處理語句)

來源:互聯網
上載者:User

     預先處理語句在某些應用場合中顯得十分高效和靈活,比如在一些重複查詢或批量資料錄入中。但是認識一個事物的真面孔往往要經曆一番過程,甚至是折磨。尤其對菜鳥們來說,搞清一個概念或排除一個故障,往往要好幾個小時甚至好幾天的時間,箇中滋味自是五花八門啊。

     閑話少說,言歸正傳。本次系統內容是xp,mysql版本5.1,php 5.3,apache 2.2。在這本教材的本例中,不幸的是教材樣本竟然是錯誤的,所以遇到故障只能搜啊搜,曆經數時終於受到啟發將這個攔路虎給掃平了,原來我的問題是使用者權限不足所致!

   以下是總結的幾個可能遇到的常見故障現象:

   錯誤1:Fatal error: Call to a member function bind_param() on a non-object in...
           sql語句錯誤導致,如:$query = "INSERT INTO products VALUES(?,?,?)";
           應該是:$query = "INSERT INTO products(sku,name,price) VALUES(?,?,?)";
      錯誤2:INSERT command denied to user 'sn2010'@'localhost' for table 'products'
          使用者沒有INSERT 許可權導致該錯誤,通過grant增加相應許可權後,該故障消除。

   ( 其他幾個故障現象沒留意儲存記錄,現在忘了呵呵)
    為了有效避免以上錯誤,應增加以下判斷:

    if( $stmt = $mysqli->prepare($query) ) {
             ...
             }else{ echo $mysqli_error;exit();}

下面是完整的測試代碼,無誤:

......

if(isset($_POST["submit"]))
  {
  $mysqli = new mysqli('localhost','s2012','s2012','fws');
  if ( mysqli_connect_errno()) {
   printf ( "Connect failed: %s/n" , mysqli_connect_error ());
   exit();
   }
  $query = "INSERT INTO products(sku,name,price)VALUES(?,?,?)";
  $stmt=$mysqli->prepare($query);
  if( $stmt = $mysqli->prepare($query) ) {

   $stmt->bind_param('ssd',$ss,$nn,$pp);
   $skuarray = $_POST['sku'];
   $namearray = $_POST['name'];
   $pricearray = $_POST['price'];
   $x = 0;
   while($x < sizeof($skuarray))
   {
    $ss = $skuarray[$x];
    $nn = $namearray[$x];
    $pp = $pricearray[$x];   
    $stmt->execute();
    //$stmt->reset();
    $x++;
   }  
   }else {
        echo $mysqli->error;
        exit();
   }
   $stmt->close();
   $mysqli->close();
  }

......

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.