mysqliのクエリだけではないWebサーバ、ローカルホスト上で動作します

StackOverflow https://stackoverflow.com/questions/2543324

  •  23-09-2019
  •  | 
  •  

質問

私は、パフォーマンスを向上させるための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メソッドを呼び出すたびに、失敗する可能性があります。あなたは一人一人をチェックする必要があります。

オン(E_ALL)と多分display_error =をするerror_reportingでそれを試してみてください
<?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整数ですか?私は通常、

のように私のmysqliのを実行します
$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';
            }

タグ役に立てば幸い
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top