2015-11-03 102 views
0

我想做一個自動完成PHP與數據庫交互,但找到超過10個在線資源,不能使它與我的數據庫一起工作。 這裏是index.php的代碼:自動完成與MySQLi和PHP(通過自動完成的用戶界面)

<!doctype html> 
<html> 
<head> 
    <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.1/themes/base/minified/jquery-ui.min.css" type="text/css" /> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 
    <script type="text/javascript" src="http://code.jquery.com/ui/1.10.1/jquery-ui.min.js"></script> 
    <script> 
     $(function() { 
      //autocomplete 
      $("#model").autocomplete({ 
       source: "search.php", 
       minLength: 1 
      });     

     }); 
    </script> 
</head> 
<body> 
    <form action='' method='post'> 
<p><label>Model:</label><input type='text' id="model" name='model' class='model'/></p> 

</body> 
</html> 

這裏是search.php中:

<?php 
define('DB_SERVER', 'localhost'); 
define('DB_USER', 'root'); 
define('DB_PASSWORD', '123456'); 
define('DB_NAME', 'inventory'); 

if (isset($_GET['term'])){ 
    $return_arr = array(); 

    $conn = new mysqli(DB_SERVER,DB_USER,DB_PASSWORD,DB_NAME); 
    $stmt = $conn->stmt_init(); 
    $term = '%'.$_GET['term'].'%'; 
    $stmt = $conn->prepare("SELECT name from items WHERE name like ?"); 
    $stmt->bind_param("s", $term); 
    $stmt->execute(); 
    $stmt->bind_result($models); 
    while($row = $models){ 
     $return_arr[] = $row['name']; 
    } 
    echo json_encode($return_arr); 
} 
?> 

而且有些教程使用fetch_array()並沒有在我的工作腳本爲什麼?它只適用於常規循環,例如while循環來存儲數據庫中的數組,然後使用foreach來回顯每一行。我正在使用$mysqli->fetch_array()。 哪部分是錯的?

回答

0

你應該這樣做:

替換這個(只是爲了方便)的 「bind_result」 行:

$stmt->bind_result($name); 

然後用這個代替while循環:

while ($stmt->fetch()) { 
    $return_arr[] = $name; 
} 

而且它應該工作。

基本上,對於查詢中的每一列,您都會在bind_result語句中添加一個變量,並在迭代結果時使用這些變量;