Я пытаюсь изменить следующий код, чтобы использовать MySqli вместо MySql. Я удалил несколько методов, которые кажутся несущественными для того, что я здесь рассматриваю.
class db { var $hostname, $database, $username, $password, $connection, $last_query, $last_i, $last_resource, $last_error; function db($hostname=DB_HOSTNAME,$database=DB_DATABASE,$username=DB_USERNAME,$password=DB_PASSWORD) { $this->hostname = $hostname; $this->database = $database; $this->username = $username; $this->password = $password; $this->connection = mysql_connect($this->hostname,$this->username,$this->password) or $this->choke("Can't connect to database"); if($this->database) $this->database($this->database); } function database($database) { $this->database = $database; mysql_select_db($this->database,$this->connection); } function query($query,$flag = DB_DEFAULT_FLAG) { $this->last_query = $query; $resource = mysql_query($query,$this->connection) or $this->choke(); list($command,$other) = preg_split("|\s+|", $query, 2); // Load return according to query type... switch(strtolower($command)) { case("select"): case("describe"): case("desc"): case("show"): $return = array(); while($data = $this->resource_get($resource,$flag)) $return[] = $data; //print_r($return); break; case("replace"): case("insert"): if($return = mysql_insert_id($this->connection)) $this->last_i = $return; break; default: $return = mysql_affected_rows($this->connection); } return $return; } function resource_get($resource = NULL,$flag = DB_DEFAULT_FLAG) { if(!$resource) $resource = $this->last_resource; return mysql_fetch_array($resource,$flag); } }
Это то, что у меня есть до сих пор:
class db { var $hostname = DB_HOSTNAME, $database = DB_DATABASE, $username = DB_USERNAME, $password = DB_PASSWORD, $connection, $last_query, $last_i, $last_resource, $last_error; function db($hostname, $database, $username, $password) { $this->hostname = $hostname; $this->database = $database; $this->username = $username; $this->password = $password; $this->connection = new mysqli($this->hostname, $this->username, $this->password, $this->database) or $this->choke("Can't connect to database"); if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } if($this->database) $this->database($this->database); } function database($database) { $this->database = $database; mysqli_select_db($this->connection, $this->database ); } function query($query, $flag = DB_DEFAULT_FLAG) { $this->last_query = $query; //print_r($query); $result = mysqli_query($this->connection, $query) or $this->choke("problem connecting to DB"); while($row=mysqli_fetch_assoc($result)) { $resource[]=$row; } //print($command); //print_r($resource);print("<br>"); list($command, $other) = preg_split("|\s+|", $query, 2); // Load return according to query type... switch(strtolower($command)) { case("select"): case("describe"): case("desc"): case("show"): $return = array(); while($data = $this->resource_get($resource, $flag)) $return[] = $data; //print_r($return); break; case("replace"): case("insert"): if($return = mysqli_insert_id($this->connection)) $this->last_i = $return; break; default: $return = mysqli_affected_rows($this->connection); } return $return; } function resource_get($resource = NULL, $flag = DB_DEFAULT_FLAG) { if(!$resource) $resource = $this->last_resource; return mysqli_fetch_array($resource, $flag); }
Итак, вот в чем проблема: я проверил результаты с помощью print_r (), и массив $ resource загружается правильно, но значение $ return при проверке с помощью print_r () заканчивается как «Array ()». Поэтому, насколько я могу судить, в этой части кода что-то неправильно обрабатывается, поэтому я включил вызов функции resource_get ():
$return = array(); while($data = $this->resource_get($resource, $flag)) $return[] = $data; //print_r($return); break;
Если я использую mysqli_fetch_row ($ resource, $ flag) вместо mysqli_fetch_array ($ resource, $ flag), я все равно получаю тот же результат, то есть print_r ($ return) дает просто «Array ()».