0

我有上传表单的 php 代码,并且正在尝试将此 mysql 更新为推荐的 mysqli。我正在尝试学习 OO 风格(也是程序性的,但我倾向于学习 OO 风格)。

到目前为止,我已经成功更新了我的所有代码,除了这个片段:

function query($query) {  
$database = $this->options['database'];  
$host = $this->options['host'];  
$username = $this->options['username'];  
$password = $this->options['password'];  
$link = mysql_connect($host,$username,$password);  
if (!$link) {  
    die(mysql_error());  
}
$db_selected = mysql_select_db($database);  
if (!$db_selected) {  
    die(mysql_error());  
}  
$result = mysql_query($query);  
mysql_close($link);  
return $result;  
}

谁能帮我把它翻译成 MySQLi,面向对象的风格?我尝试了很多组合,我不知道我哪里出错了(尝试上传照片时出现 db 错误)。

谢谢!

4

1 回答 1

0

这应该适合你。我不确定 mysqli 结果是否会在 mysqli->close() 中存活,所以我已将 $result 中的数据检索到一个数组中并返回它。您可能想对此进行测试。

我还想知道为什么您要在每个查询周围打开连接并再次关闭它。我通常会打开连接并保持打开状态,直到脚本完成所有查询。

function query($query) {  
  // no real need for this - the variables can be used directly
  $database = $this->options['database'];  
  $host = $this->options['host'];  
  $username = $this->options['username'];  
  $password = $this->options['password'];  

  // instantiate the mysqli object. Select the database at the same time.
  $mysqli = new mysqli($host, $username, $password, $database);

  if ($mysqli->connect_error) {  
    die($mysqli->connect_error);  
  }

 $result = $mysqli->query($query); 
 if ($result !== false) { 

   // retrieve data
   $data = array();
   while ($data[] = $result->fetch_assoc()) {}

   // release the result set and close the connection
   $result->free();
   $mysqli->close();
   return $data;
 } else {
   syslog(LOG_ERROR, "SQL error:".$mysqli->error);
   $mysqli->close();
   return false;       
 }
}
于 2013-06-30T22:10:09.800 回答