1

データベースからの情報に依存する変数を作成しようとしています。$pathデータベースから復元される情報に応じて、パスを格納する変数を生成しようとしています。

$linkid = mysql_connect('localhost','user','password');
mysql_select_db("table", $linkid);
$variable = "00001";
$groupID = null;
$temp = mysql_query("SELECT groupID FROM table WHERE memberID='$variable'", $linkid);

while ($row = mysql_fetch_row($temp)){
    global $groupID;
    foreach ($row as $field){
        $groupID = $field;
    }
}

....

$path = "C:\WAMP\www\project\\" . $groupID;
$dir_handle = @opendir($path) or die('Unable to open $path');

この背後にある考え方は$variable、PHP が実行される前に設定されますが00001、テスト用に設定されています。理想的な状況は、$path等しいはずC:\WAMP\www\project\00001\です。現在、元にecho戻すと、最後に追加されてい$pathない元のパスだけが得られます。$groupID

「mysql_fetch_row() はパラメーター 1 がリソースであることを期待しています」というメッセージも受け取りますが、以前にこの方法を使用して情報を取得したことがあり、問題なく機能しました。同じ方法でテーブルをセットアップしたので、問題があります。

明らかな何かが欠けていると感じているので、助けていただければ幸いです。課題や学校関連のものではありません (もっと学ぶために何かを試すだけです) ので、それを修正して理由を説明することで自分をノックアウトしてください :)

さらに、memberIDに一致するのは1 つだけ$variableなので、それを取得する別の方法があれば教えていただければ幸いです。

ああ、私は変数名が衝撃的であることを知っていますが、それらはここにあるだけで、実際のコードでは異なるので、批判しないでください:p

編集: BT634 のアドバイスに従った後、SQL クエリは正しいです。phpMyAdmin で実行すると、必要なグループ ID が取得され、期待されます。

4

4 に答える 4

2
mysql_select_db("table", $linkid)

実際にする必要があります

mysql_select_db("database_name", $linkid)

テーブル自体ではなく、テーブルを含むデータベースに接続しているためです。

また、mysql_result($temp,0)whileループの代わりに試してください

于 2013-01-17T21:18:48.707 に答える
1

まず、接続で接続するデータベースを指定するのではなく、どのテーブルを指定するのかを指定します。クエリが返す行数を確認することもできます。

$temp = mysql_query("SELECT groupID FROM table WHERE memberID='$variable'", $linkid);
echo mysql_num_rows($temp);

それでも有効なリソースではないという苦情が続く場合は$temp、MySQL接続コードを次のように変更します。

// Establish connection
$con = mysql_connect("localhost","peter","abc123");
if (!$con) die('Could not connect: ' . mysql_error());
mysql_select_db("my_db", $con);

// Make your query
$result = mysql_query("SELECT groupID FROM table WHERE memberID='$variable'");

// Find out what the value of the query is (i.e. what object/resource it is)
var_dump($result);

MySQLが有効なデータを返していることがわかったら、必要な値を抽出します。グローバルを使用する必要はありません。

while ($row = mysql_fetch_row($temp)){
    $groupId = $row[0];
}

// Use $groupId however you please...

心に留めておくべき1つのことはそれmysql_fetch_rowが戻るということです

array
(
   0 => '...'
)

戻ってmysql_fetch_assocきますが:

array
(
   'groupId' => '...'
)
于 2013-01-17T21:18:49.000 に答える
1

次のようなものを試してください。

global $groupID;

$linkid = mysql_connect('localhost','user','password');
mysql_select_db("table", $linkid);
$variable = "00001";
$groupID = null;
$sql = "SELECT groupID FROM table WHERE memberID='$variable'";
$temp = mysql_query($sql, $linkid) or die(mysql_error());

$row = mysql_fetch_row($temp);
if ($row) {
    $groupID = $row['groupID'];
}

単一の値を取得していて、それが一意であることが保証されている場合、ループ構造は不要です。問題が発生した場合にクエリがエラーで終了することを確認するためのチェックを追加しました。これはどこでも実行するのが理想的であるため、たとえば、で実行しmysql_select_dbます。

于 2013-01-17T21:19:32.267 に答える
1

確実に実行されているクエリを見つけ、それを通常の MySQL クライアントに貼り付けて、クエリが正しいことを確認します。

「$variable」を定義した後にこれを行うだけです

exit("SELECT groupID FROM table WHERE memberID='$variable'");

次に、出力を MySQL クライアント (またはコマンド ラインから MySQL) にコピーします。

于 2013-01-17T21:10:00.210 に答える