1

PHP/MySQLi を使用して MySQL データベースの情報を適切に使用する方法の概念を理解するのに苦労しているようです。私が理解しているように、接続オブジェクトを表す変数を生成します。

$connectionObject = mysqli_connect('serverString', 'userString', 'passString', 'databaseString');

次に、使用するクエリ文字列を表す変数を生成します。

$queryString = "SELECT rowName FROM tableName";

次に、成功したクエリから返された結果オブジェクトを表す変数を生成します。

$resultObject = mysqli_query($connectionObject, $queryString);

次に、fetch_assoc() 関数を使用して結果オブジェクトから配列を生成し、それを変数に割り当てます。

$resultArray = myqli_fetch_assoc($resultObject);

次に、while ループを使用して (これには問題があります)、配列を並べ替えて、行の内容を何らかの方法で使用できます。

while ($resultArray) {
echo $resultArray["rowName"];
}

「BLAH」以下の内容のテキストベースのCHAR(10)フィールドのテキスト内容を出力することさえ、私にとってはうまくいかないので、どういうわけか、この概念は間違った方法で持っていますか?

とにかく最後に名前で配列項目を選択するために配列をループする必要があることは、そもそも私には意味がないように思えますが、どこを見ても同じ概念を見つけます。

いくつかの重要な詳細を除いた私のスクリプト コードは次のとおりです。

if ($connectionObject=mysqli_connect("host0", "username0", "password0", "mysqldatabase0")) {
echo "Con";
}

if ($queryString="SELECT 'testdata' FROM 'testtable'") {
echo "Query";
}

if ($resultObject=mysqli_query($connectionObject, $queryString)) {
echo "Result";
}

if ($resultArray=mysqli_fetch_assoc($resultObject)) {
echo "Array";
}

while ($row=$resultArray) {
echo $row["testdata"];
print_r ($row);
}
4

2 に答える 2

0

mysqli_fetch_assocは、結果セットでフェッチされた行を表す文字列の関連配列を返します$resultObject

問題は、whileループを使用している場所です。返された連想配列を変数にキャプチャし、次のようにその変数を介してデータにアクセスします。

while ($row = $resultArray) {
    echo $row["rowName"];
}

並べ替えるには、次のようにクエリでrowNamemysql 句を使用できますorder by。これにより、rowName で並べ替えられた結果が返されます。

$queryString = "SELECT rowName FROM tableName order by rowName";

OPが完全なコードを投稿した後の更新:

最初の if ステートメントで、接続が失敗した場合はどうなりますか? そこにいくつかのエラー処理を追加したい:

$connectionObject=mysqli_connect("host0", "username0", "password0", "mysqldatabase0"));
if (!$connectionObject) {
    // exist out of this script showing the error
    die("Error connecting to database " . mysqli_error($connectionObject));
} else {
    // Don't really need this else but I'll keep it here since you already had it
    echo "Con";
}

ここに問題があります。mysql の識別子であるカラム名とテーブル名にシングル クォーテーションを使用しています。MySQL 識別子の引用文字は、一重引用符ではなくバッククォートです。
基本的に、これらの識別子の 1 つが mysql 予約語 ( MySQL Reserved words ) の 1 つである場合は、バッククォートを使用する必要があります。それ以外の場合は、それらを使用する必要はありません。

クエリを更新します。

if ($queryString="SELECT `testdata` FROM `testtable`") {
    echo "Query"; // Leaving as is, not required
}

最後に改善点です。ここにもエラー処理を追加します。

if ($resultObject=mysqli_query($connectionObject, $queryString)) {
  echo "Result"; // Leaving as is, not required
} else {
  echo "Error executing Query " . mysqli_error($connectionObject);
}

このスクリプトを使用すると、エラー メッセージがクライアントに出力されることに注意してください。つまり、このスクリプトを Web アプリケーションで使用すると、ユーザーのブラウザにエラーが表示されます。したがって、ログを直接出力するのではなく、ログの実装を検討する必要があります。

于 2013-08-13T02:56:01.423 に答える