我想按照這個:http://www.9bitstudios.com/2013/05/restful-backbone-js-implementation-using-slim-api/,這http://coenraets.org/blog/2011/12/backbone-js-wine-cellar-tutorial-part-1-getting-started/。我有這樣的代碼到目前爲止 - 我纔剛剛開始試圖瞭解苗條的PHP框架:苗條PHP獲取路線
<?php
require 'Slim/Slim.php';
\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim();
// GET route with parameter
$app->get('/users', function() use ($app) {
// get all users
$host="localhost"; // Host name
$password=""; // Mysql password
$db_name="backbone"; // Database name
$tbl_name="Users"; // Table name
// Connect to server and select databse.
$mysqli = new mysqli("$host", "root", "$password", "$db_name")or die("cannot connect");
$sql = $mysqli->prepare("SELECT username FROM $tbl_name");
$sql->execute();
$sql->bind_result($namesie);
while ($sql->fetch()) {
echo json_encode($namesie);
}
$sql->close();
$mysqli->close();
});
// GET route with parameter
$app->get('/user/:username', function() use ($app) {
$request = (array) json_decode($app->request()->getBody()); // WHAT IS THIS LINE DOING?
var_dump($request);
$host="localhost"; // Host name
$password=""; // Mysql password
$db_name="backbone"; // Database name
$tbl_name="Users"; // Table name
// Connect to server and select databse.
$mysqli = new mysqli("$host", "root", "$password", "$db_name")or die("cannot connect");
$sql = $mysqli->prepare("SELECT * FROM $tbl_name WHERE username=:username");
var_dump($sql);
$sql->execute();
$sql->bind_result($dauser);
echo json_encode($dauser);
});
第一條路線的作品,因爲它應該顯示所有用戶像這樣:"eamon""joe"
。
我做的$request
變量var_dump
第二GET
路線(/user/:username
) - 這是一個空數組...什麼是獲得存儲在這個變量? var_dump($request)
之後的所有內容都是我根據用戶名獲取正確用戶的嘗試。此外var_dump($sql)
打印出bool(false)
這意味着用戶沒有被正確地在數據庫中找到。我有一個數據庫表叫Users
我填充數據庫與兩個用戶:「喬」和「埃蒙」。當我鍵入localhost/user/joe
到我的瀏覽器,我得到一個錯誤(與var_dump
的一起)說:
Fatal error: Call to a member function execute() on a non-object
我想是因爲什麼也沒有存儲在$sql
我得到這個錯誤。任何人都可以將我指向正確的方向嗎?我最終將使用backbone.js - 在此項目之後,我一直在我的路由中對代碼進行建模:http://coenraets.org/blog/2011/12/backbone-js-wine-cellar-tutorial-part-1-getting-started/。他宣佈路線,然後使用一個功能,如getWine($id)
這實際上是我試圖實現 - 但用戶數據庫,而不是。我也在使用mysqli
,因爲他使用PDO
我想。
UPDATE
我的代碼現在看起來像這樣:
$app->get('/user/:username', function ($username) use ($app) {
$host="localhost"; // Host name
$password=""; // Mysql password
$db_name="backbone"; // Database name
$tbl_name="Users"; // Table name
// Connect to server and select databse.
$mysqli = new mysqli("$host", "root", "$password", "$db_name")or die("cannot connect");
$sql = $mysqli->prepare("SELECT * FROM $tbl_name WHERE username=?");
$sql->bind_param("s",$username);
$sql->execute();
$sql->bind_result($profile);
if($sql->fetch()) {
echo json_encode($profile);
}
$sql->close();
$mysqli->close();
});
當我在localhost/user/joe
類型(「喬」是我手動插入到數據庫中的用戶),我得到這個錯誤:
mysqli_stmt::bind_result(): Number of bind variables doesn't match number of fields in prepared statement
是不是有隻有一個字段? username
字段?
的感謝!我會更新我的問題,以反映我對您的代碼所做的事情 - 我認爲我們正處在正確的軌道上。讓我以一個新的錯誤 - 你可以理解...'mysqli_stmt :: bind_result():綁定變量的數目不準備statement'匹配字段數 – ewizard
只是想通了,你是非常接近 - bind_result做不喜歡'SELECT * FROM'。我不得不將其更改爲'SELECT username,email FROM',這實際上更好,因爲我不想檢索密碼(表中唯一的其他列)。 – ewizard
很高興我指出你在正確的方向! – Ingro