0

mysqliオブジェクトを作成し、クエリを準備する次のコードがあります。

    $GLOBALS['DB_something'] = new mysqli('$database_hostname','$database_username','$database_password','$database_default');
    $GLOBALS['DB_prepared_get'] = $GLOBALS['DB_something']->prepare("SELECT ? from database_name WHERE hash=?");

次のコードは、結果を取得して表示します。私は最近、特にPHPを使用していないプリペアドステートメントに取り組んでいないため、その結果を取得する方法がわかりません。
プリペアドステートメントを使用せずにコードを記述した場合は機能しますが、多くの理由から、プリペアドステートメントを使用してコードを書き直す必要があります。

$GLOBALS['DB_prepared_get']->bind_param('ss', $arg, $index);
$GLOBALS['DB_prepared_get']->execute();
$GLOBALS['DB_prepared_get']->bind_result($result); # this is an array of values 

$GLOBALS['DB_prepared_get']->fetch();       
            # below this, I don't know if it's ok               
            if(mysql_num_rows($result) == 0){
                return "0";
            }

            else{
                while($GLOBALS['DB_prepared_get']->fetch()) {
                    return $result;
                }
            }

            $GLOBALS['DB_prepared_get']->close();

助けてくれてありがとう。

編集:明確にするために、私の問題は、正確な結果値を取得してそれらを印刷する方法などです。だから構文は私がおそらく間違っていることです。

4

2 に答える 2

0

あなたのコードには非常に多くの欠陥があるため、何が問題なのかを説明することすらできません. ただし、OO プログラミングの経験がない場合は、最初に mysqli で手続き型コードを記述してみてください。

このコードは動作するはずです:

  $mysqli = new mysqli( $database_hostname, $database_username, $database_password, $database_default );
  if ($mysqli->connect_error) {
    die('Connect Error (' . $mysqli->connect_errno . ') '  . $mysqli->connect_error);

  if ($stmt = $mysqli->prepare("SELECT ? from database_name WHERE hash=?")) {
    $stmt->bind_param("s", $fieldname); // first marker
    $stmt->bind_param("s", $hashwhere); // second marker

    $stmt->execute();

    $result = array();
    while ($stmt->fetch()) {
      $result[] = array($fieldname);
    }

    $stmt->close();
  }

  $mysqli->close();

  var_dump($result);
于 2012-09-05T17:57:04.177 に答える
0

私の知る限り、クエリの列をパラメーターとして指定することはできません。列を準備済みステートメント文字列に直接書き込む必要があります。

何かのようなもの

$GLOBALS['DB_prepared_get'] = $GLOBALS['DB_something']->prepare("SELECT a,b,c from database_name WHERE hash=?");
于 2012-09-05T17:03:44.157 に答える