私はこれに従おうとしています: 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
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"
。
2 番目のルート ( )var_dump
で変数を実行しました。これは空の配列です...この変数には何が格納されていますか? その後のすべては、ユーザー名に基づいて正しいユーザーを取得しようとする私の試みです。また、ユーザーがデータベースで正しく検出されていないことを意味する出力も出力します。という名前のデータベース テーブルがあり、データベースに "joe" と "eamon" という 2 人のユーザーを入力しました。ブラウザに入力すると、次のようなエラーが表示されます ( 'sとともに)。$request
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を使用する予定です。このプロジェクトの後、ルートでコードをモデル化しています。 1-はじめに/ . 彼はルートを宣言し、getWine($id)
基本的に私が実装しようとしているもののような関数を使用しますが、代わりにユーザーデータベース用です。彼が使っているように、私もmysqli
どこを使っているPDO
と思います。
アップデート
私のコードは次のようになります。
$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
(「joe」はデータベースに手動で挿入したユーザーです)、次のエラーが表示されます。
mysqli_stmt::bind_result(): Number of bind variables doesn't match number of fields in prepared statement
フィールドは一つじゃないの?フィールドusername
?