0

オンラインのチュートリアルに従って、このコードを取得することができました:

class RedeemAPI {
private $db;

// Constructor - open DB connection
function __construct() {
    $this->db = new mysqli('localhost', 'username', 'password', 'promos');
    $this->db->autocommit(FALSE);
}

// Destructor - close DB connection
function __destruct() {
    $this->db->close();
}

// Main method to redeem a code
function redeem() {
    // Print all codes in database
    $stmt = $this->db->prepare('SELECT id, code, unlock_code, uses_remaining FROM rw_promo_code');
    $stmt->execute();
    $stmt->bind_result($id, $code, $unlock_code, $uses_remaining);
    while ($stmt->fetch()) {
        echo "$code has $uses_remaining uses remaining!";
    }
    $stmt->close();
}
}

それからすぐに、男は私がページを実行してこれを見るべきだと言います:

 test has 10000 uses remaining!

しかし、何も起こりません。ページは空白です。データはデータベースにあり、資格情報は 100% 正しいです。

何かご意見は?ありがとう。

4

4 に答える 4

2

コードには と が含まれている必要があります。チュートリアルにそれが含まれていないから$api = new RedeemAPI();$api->redeem();いって、それを使用しないという意味ではありません。

だから試してください:

error_reporting(E_ALL);
class RedeemAPI {
private $db;

// Constructor - open DB connection
function __construct() {
    $this->db = new mysqli('localhost', 'username', 'password', 'promos');
    $this->db->autocommit(FALSE);
}

// Destructor - close DB connection
function __destruct() {
    $this->db->close();
}

// Main method to redeem a code
function redeem() {
    // Print all codes in database
    $stmt = $this->db->prepare('SELECT id, code, unlock_code, uses_remaining FROM rw_promo_code');
    $stmt->execute();
    $stmt->bind_result($id, $code, $unlock_code, $uses_remaining);
    while ($stmt->fetch()) {
        echo "$code has $uses_remaining uses remaining!";
    }
    $stmt->close();
}
}

$api = new RedeemAPI();
$api->redeem();
于 2012-07-15T02:36:02.523 に答える
0

ここでは、さまざまなことが起こる可能性があります。開店直後

    <?php 

追加

ini_set("display_errors", 1); 

エラーを表示します。を使用してブラウザで結果を確認します

http://localhost/promos 

このチュートリアルを実行しているマシンでコードが実行されている場合。別のマシン上にある場合は、「localhost」をリモート マシンの IP アドレスに置き換えます。あなたのコードで私が見たものから、あなたは使用しませんでした

    $api = new RedeemAPI();
    $api->redeem();

これを除外するのと同じくらい簡単なことかもしれません。これを追加してもまだ空白のページが表示される場合は、エラーが原因であるか、mysql サーバーのセットアップ中に見逃したことが原因である可能性があります。これは、この同じチュートリアルを完了するときの問題でした。データベーステーブルを削除して再度追加し、「t」へのmysql部分の指示に従っていることを確認してください。

于 2013-08-18T19:49:24.503 に答える
0

印刷を使用してデバッグするにはecho、次のように使用できます。

変化する:

function redeem() {
    // Print all codes in database
    $stmt = $this->db->prepare('SELECT id, code, unlock_code, uses_remaining FROM rw_promo_code');
    $stmt->execute();
    $stmt->bind_result($id, $code, $unlock_code, $uses_remaining);
    while ($stmt->fetch()) {
        echo "$code has $uses_remaining uses remaining!";
    }
    $stmt->close();
}

に:

function redeem() {
    // Print all codes in database
    echo "1\n";
    $stmt = $this->db->prepare('SELECT id, code, unlock_code, uses_remaining FROM rw_promo_code');
    echo "2\n";
    $stmt->execute();
    echo "3\n";
    $stmt->bind_result($id, $code, $unlock_code, $uses_remaining);
    echo "4\n";
    while ($stmt->fetch()) {
    echo "5\n";
        echo "$code has $uses_remaining uses remaining!";
    }
    echo "6\n";
    $stmt->close();
    echo "7\n";
}

このようにして、どの行で失敗したかを確認できます。
もう 1 つのオプションは、tryandを使用することcatchです。

function redeem() {
      try{
        // Print all codes in database
        $stmt = $this->db->prepare('SELECT id, code, unlock_code, uses_remaining FROM rw_promo_code');
        $stmt->execute();
        $stmt->bind_result($id, $code, $unlock_code, $uses_remaining);
        while ($stmt->fetch()) {
            echo "$code has $uses_remaining uses remaining!";
        }
        $stmt->close();
       }
      catch(Exception $e) {
          echo 'Caught exception: ',  $e->getMessage(), "\n";
      }
}
于 2012-07-15T02:25:00.047 に答える
0

クラスのインスタンスを作成しましたか??

クラスのインスタンスを作成redeem()してから、目的の出力を得るために関数を呼び出す必要があります。

<?
    $someVar = new RedeemAPI();
    $someVar->redeem();
?>
于 2012-07-15T02:33:53.907 に答える