mysqliのクエリだけではないWebサーバ、ローカルホスト上で動作します
質問
私は、パフォーマンスを向上させるためのMysqli枠組みに私の古いクエリの一部を変更しました。すべてがローカルホスト上で正常に動作しますが、私はWebサーバにアップロードするとき、それは何も出力しません。接続後、私はエラーをチェックし、どれも存在しません。私はまた、PHPのモジュールがインストールされ、mysqliのが有効になっている確認ます。
私はエラーが表示されていないとして、それがデータベースへの接続を作成することを確信しています。 (私はデータベース名の文字列を変更したときに、それがエラーを与えた)。
このように見えるウェブサーバ、上のクエリからの出力はありません。
$mysqli = new mysqli("server", "user", "password");
if (mysqli_connect_errno()) {
printf("Can't connect Errorcode: %s\n", mysqli_connect_error());
exit;
}
// Query used
$query = "SELECT name FROM users WHERE id = ?";
if ($stmt = $mysqli->prepare("$query"))
{
// Specify parameters to replace '?'
$stmt->bind_param("d", $id);
$stmt->execute();
// bind variables to prepared statement
$stmt->bind_result($_userName);
while ($stmt->fetch())
{
echo $_userName;
}
$stmt->close();
}
}
//close connection
$mysqli->close();
として、私はこのコードだけではないオンライン私のLocalServerに完璧に動作しました。エラーログをチェックし、良好な接続へのすべてのポイントので、何もありません。この1つは私が立ち往生しているので、すべてのテーブル等にも誰でも任意のアイデアが存在します!また、私はこの作業を取得する場合、すべての私の他のクエリはまだ動作しますか?それとも私は彼らが同様にmysqliのフレームワークを使うようにする必要がありますか?事前に感謝します。
EDITます:
[OK]をアイブ氏は何が起こっているかを確認するために、いくつかの「デバッグ」を行って。私は、クエリに一致するクエリだテーブル内のデータがあります。私は、準備文を確認するには、次のでした。
echo "debug 1";
if ($stmt = $mysqli->prepare("$shiftQuery"))
{
echo "debug 2";
printf("Error: %s.\n", $stmt->error);
etc...
}
だから、基本的になステートメントの前に出力「デバッグ1」(それがないもの)用意があるはずです。そして、それが出力すべき「デバッグ2」と発生したすべてのエラーの後。
それはIF文でデバッグ2ラインに到達doesntのように、問題がどこかにここにあります。接続の詳細は大丈夫なので$ mysqliのオブジェクトが作成されるwouldntの理由、私は本当に見傾けます。その所与の誰それ以上のアイデア?
感謝
正しい解決策はありません
他のヒント
mysqliの/のstmtメソッドを呼び出すたびに、失敗する可能性があります。あなたは一人一人をチェックする必要があります。
<?php
error_reporting(E_ALL); ini_set('display_errors', 1);
// passing database name as fourth parameter
$mysqli = new mysqli("server", "user", "password", 'dbname');
if (mysqli_connect_errno()) {
printf("Can't connect Errorcode: %s\n", mysqli_connect_error());
exit;
}
// Query used
$query = "SELECT name FROM users WHERE id = ?";
if ( false===($stmt=$mysqli->prepare("$query")) ) {
echo 'mysqli::prepare failed: ', htmlspecialchars($mysqli->error);
die;
}
// Specify parameters to replace '?'
$rc = $stmt->bind_param("d", $id);
if ( !$rc ) {
echo 'bind_param failed: ', htmlspecialchars($stmt->error);
die;
}
echo '<pre>Debug: execute()</pre>';
$rc = $stmt->execute();
if ( !$rc ) {
echo 'execute failed: ', htmlspecialchars($stmt->error);
die;
}
echo '<pre>Debug: bind_result()</pre>';
// bind variables to prepared statement
$rc = $stmt->bind_result($_userName);
if ( !$rc ) {
echo 'bind_result failed: ', htmlspecialchars($stmt->error);
die;
}
echo '<pre>Debug: fetch()</pre>';
while ($stmt->fetch())
{
echo 'username: ', $_userName;
}
echo '<pre>Debug: stmt close()</pre>';
$stmt->close();
echo '<pre>Debug: mysqli close()</pre>';
$mysqli->close();
MySQLのユーザー権限は、ホストに敏感である - それは他のホスト異なる権限からローカルホストとUSER1からUSER1与えることができます。
GRANT ALL ON *.* TO user@'%' IDENTIFIED BY 'password';
のMysqliフレームワークは、パフォーマンスは向上しません。
エラーチェックは、接続した後が、各クエリを実行した後だけでなく、実行する必要があります。
エラーのチェック$stmt->error
は
またはthrowed例外に対してチェックしてみてください。
Id
整数ですか?私は通常、
$sql = "SELECT name FROM users WHERE id = ?";
if($stmt = $mysqli->mysqli->prepare($sql)){
$stmt->bind_param("i", $id);
if($stmt->execute()){
$stmt->bind_result($name);
$stmt->store_result();
if($stmt->fetch()){
return $name;
}else{
return 'Not Found';
}
}else{
return 'Execute Error';
}
}else{
return 'SQL Error';
}
タグ役に立てば幸い