[PHPBREW] Fatal error: Uncaught mysqli_sql_exception: No such file or directory

Secara misteri MySQL saya tidak mahu berfungsi di dalam PHPBrew, tetapi berfungsi secara normal di dalam PHP yang saya pasang melalui repository Ubuntu. Bagi yang tidak tahu, PHPBrew adalah alat untuk membina PHP ke dalam home directory.

Kod yang saya miliki adalah seperti berikut

$db = new mysqli("localhost", "user", "pass", "db"); 
if($db->;connect_errno > 0){ 
  die('Unable to connect to database [' . $db->connect_error . ']'); 
} 

DanĀ error yang saya perolehi daripada baris 1 adalah

Fatal error: Uncaught mysqli_sql_exception: No such file or directory

Penyelesaiannya agak mudah. Dalam kod di atas, saya menggunakan “localhost”. Entah atas apa sebab, saya perlu menggunakan “127.0.0.1”.

$db = new mysqli("127.0.0.1", "user", "pass", "db"); 
if($db->;connect_errno > 0){
  die('Unable to connect to database [' . $db->connect_error . ']'); 
}

[PHP][MySQL] Infinite loop di dalam while semasa memanggil fetch_assoc()

Semasa memanggil fetch() untuk mendapatkan hasil dari pertanyaan (query) SQL.

Kod yang saya punyai adalah

if($sqlexec = $db->query("SELECT * from torrent WHERE running IN(0)")){
  print("Looping through ".$sqlexec->num_rows." records.\n\n");
  $i=0;
  while($row = $sqlexec->fetch_assoc()){
    $i++;
    print("Processing record ".$i."\n.");
    $rpc->GetSessionID();
    $hash = $row['hash'];
    $id = $row['owner'];
    $added = $row['time_added'];
    $done = $row['time_done'];

    $get = $rpc->get($hash, array( 'id', 'name', 'eta', 'etaIdle', 'downloadDir', 'peersSendingToUs', 'percentDone', 'rateDownload', 'totalSize', 'hashString', 'isFinished', 'isStalled', 'activityDate', 'doneDate')); 
 
    $sizeGB = ceil($get->arguments->torrents[0]->totalSize /1000/1000/1000);
    $expireIn = $sizeGB*$expiry;

    if($sqlexec = $db->query("SELECT * from torrent WHERE running IN(0) AND hash='".$hash."'")){
      if($sqlexec->num_rows<=1){
        if(($done + ($expireIn*60*60)) <= time()){
          $del = $rpc->remove(array($hash), true);
      }
    }
  }
}

Gelung (loop) while ini berjalan tanpa henti. Setelah diteliti, saya menggunakan pemboleh ubah yang sama pada kedua-dua pertanyaan (query) 1 dan 18.
Setelah menggunakan pemboleh ubah yang berbeza, akhirnya kod ini berjalan dengan sempurna.

[PHP][MYSQL] Statement tidak berfungsi

Saya mengalamai satu masalah di mana query MySQL UPDATE tidak berfungsi. Agak pelik apabila $db->prepare dan $db->query memberi respon yang kosong, tiada perubahan database server tiada juga error dalam log.

Disebabkan itu, saya cuba melakukan query tersebut di sekeliling code untuk mencari di manakah query tersebut berfungsi dan di mana tidak. Lalu saya dapati query tersebut tidak berfungsi selepas code ini:

if($sqlexec = $db->prepare("SELECT time from download_log WHERE userid=? ORDER BY id DESC LIMIT 1")){
    $sqlexec->bind_param("i", $userID);
    $sqlexec->execute();
    $sqlexec->bind_result($time);
    while($sqlexec->fetch()){
        $timeout = (time()-$time);
        if($timeout<5*60){   
          $msg->send("You must wait ".(5*60-$timeout)." seconds before adding a new link.", "HTML"); exit;
        }      
        break;
     }
}

Saya berfikir sejenak lalu memutuskan untuk menutup statement SQL tersebut menggunakan $sqlexec->close():

if($sqlexec = $db->prepare("SELECT time from download_log WHERE userid=? ORDER BY id DESC LIMIT 1")){
    $sqlexec->bind_param("i", $userID);
    $sqlexec->execute();
    $sqlexec->bind_result($time);
    while($sqlexec->fetch()){
        $timeout = (time()-$time);
        if($timeout<5*60){
            $msg->send("You must wait ".(5*60-$timeout)." seconds before adding a new link.", "HTML"); 
            exit;
        }
        break;
    }
    $sqlexec->close();
}

Berjaya! Saya tidak tahu kenapa statement ini tidak tertutup sendiri setelah selesai, tetapi mungkin membiasakan diri untuk menutup prepared statement setelah selesai adalah sesuatu yang bagus sekaligus dapat mengelakkan bug yang tidak dijangka.