<?php
 2 
 3     $db = new mysqli("localhost","user","password","testdb");
 4     
 5     if (mysqli_connect_errno()){
 6         printf("Error:%s\n",mysqli_connect_error());
 7         exit;
 8     }
 9     else {
10         if ($stmt = $db->prepare("select id,name,author,price from book where name like ?")){
11         //如上行,$stmt并没有实例化,但是为什么可以调用函数了?    
12             $stmt->bind_param('s',$n);
13             $n = "%p%";
14             
15             $stmt->execute();
16             
17             $stmt->store_result();
18             $stmt->bind_result($id,$name,$author,$price);
19             while ($stmt->fetch()){
20                 printf("%s:%s,%s,%s<br/>",$id,$name,$author,$price);
21             }
22             $stmt->close();
23         }
24         
25         $db->close();
26     }
27 ?>

解决方案 »

  1.   

    $stmt->bind_param('s',$n);
    13             $n = "%p%";
    14             
    15             $stmt->execute();
    这里的代码是不是有问题应该是$db去调用方法才是吧。
      

  2.   

    书可以不看,但无论如何,手册总是要看的!
    原型:
    mysqli_stmt mysqli::prepare ( string $query )mysqli::prepare 返回一个 mysqli_stmt 类型数据
    而 mysqli_stmt 类型是一个对象,那么
    $stmt = $db->prepare("select id,name,author,price from book where name like ?")
    中的 $stmt 不就是个 mysqli_stmt 对象了吗?