0

以下にクエリがあります。

$r = "Query goes here...";
$r = conn::execq($q);
while($fetch = mysqli_fetch_array($r)) {
   $q = "Query goes here..."; //The $fetch value above is inserted here as 'WHERE' clause
   $r = conn::execq($q); //--> The problem
   $r = mysqli_fetch_row($r);

   if($r > 0) print "ok<br/>";
   else print "failed<br/>";
}

クラス " conn " 関数 " execq " では:

public static function execq($q) {
    $dbc = @mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME) OR die ('Could not connect to MySQL: ' . mysqli_connect_error());
    $r = mysqli_query($dbc, $q);
    mysqli_close($dbc);
    return $r;
}

execq関数は、ループ後に呼び出されません。最初のクエリが正常に実行され、次に 2 番目のクエリが実行されています。いくつかのループの後、関数「conn::execq」を呼び出すためにクエリが停止されました。何か案は?ありがとう..

- - 編集 - -

conn:openconn(); //Open connection   

$r = "Query goes here...";
$r = conn::execq($q);
while($fetch = mysqli_fetch_array($r)) {
   $q = "Query goes here..."; //The $fetch value above is inserted here as 'WHERE' clause
   $r = conn::execq($q); //--> The problem
   $r = mysqli_fetch_row($r);

   if($r > 0) print "ok<br/>";
   else print "failed<br/>";
}

conn:closeconn(); //Close connection

クラス " conn " では:

public static function openconn() {
    global $dbc;
    $dbc = @mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME) OR die ('Could not connect to MySQL: ' . mysqli_connect_error());
}

public static function closeconn() {
    mysqli_close($dbc);
}

public static function execq($q) {        
    $r = mysqli_query($dbc, $q);        
    return $r;
}

そして今、私は持っています:

Notice: Undefined variable: dbc in ...
Warning: mysqli_error() expects parameter 1 to be mysqli, null given in ...
4

1 に答える 1

2
  1. 非常に短い順序でデータベース接続を数回開いたり閉じたりしています。これは恐ろしく非効率的です。開いている接続を1 つ再利用してください。
  2. 接続が既に閉じられたmysqli_fetch_rowでリソースを使用しようとしています。これはまったく機能しません。
  3. $rループ内のリソースを上書きしているため$rwhile条件内のリソースはそれ以上の結果を生成せず、反復が終了します。
  4. 最初のクエリの結果をループしてさらに多くのクエリを生成するのではなく、もう少し複雑な SQL クエリを作成して必要な情報を取得するようにしてください。多くの場合、データベースは、あなたが思っているよりもはるかに多くの作業を行うことができます。
于 2012-08-10T06:02:24.880 に答える