Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Переход на mysqli помощь в запросах
Форумы портала PHP.SU » » Вопросы новичков » Переход на mysqli помощь в запросах

Страниц (1): [1]
 

1. Lolya - 24 Мая, 2018 - 11:04:20 - перейти к сообщению
Помогите пожалуйста перевести два запроса на новый вид mysqli, так как все в старом скрипте до сих пор сидит на sql_query. В новых видах запросах толком не понимаю, в старом еле разобрался, а тут вообще темный лес. Заранее спасибо. Ниже два запроса из скрипта, как самые трудные для меня.

PHP:
скопировать код в буфер обмена
  1. function dbconn($autoclean = false, $lightmode = false) {
  2.         global $mysql_host, $mysql_user, $mysql_pass, $mysql_db, $mysql_charset;
  3.  
  4.         if (!@mysql_connect($mysql_host, $mysql_user, $mysql_pass))
  5.                 die("[" . mysql_errno() . "] dbconn: mysql_connect: " . mysql_error());
  6.  
  7.         mysql_select_db($mysql_db)
  8.                 or die("dbconn: mysql_select_db: " . mysql_error());
  9.  
  10.         mysql_query("SET NAMES $mysql_charset");
  11.  
  12.         userlogin($lightmode);
  13.  
  14.         if (basename($_SERVER['SCRIPT_FILENAME']) == 'index.php')
  15.                 register_shutdown_function("autoclean");
  16.  
  17.         register_shutdown_function("mysql_close");
  18. }


и еще один:

PHP:
скопировать код в буфер обмена
  1. $query = "SELECT t.id, t.moderated, t.moderatedby, t.dostup, t.category, t.incategory, t.voice, t.tryd, t.webdl, (t.leechers + t.remote_leechers) AS leechers,
  2.                 (t.seeders + t.remote_seeders) AS seeders, t.free, t.name, t.size, t.added, t.not_sticky, t.owner, t.rating,
  3.                 c.name AS cat_name, c.image AS cat_pic, i.name AS incat_name, i.image AS incat_pic, d.name AS tryd_name, d.image AS tryd_pic,
  4.                 v.name AS voice_name, v.image AS voice_pic, w.name AS webdl_name, w.image AS webdl_pic,
  5.                 u.class" . ($CURUSER ? ", EXISTS(SELECT * FROM readtorrents WHERE
  6.                 readtorrents.userid = " . sqlesc($CURUSER["id"]) . " AND readtorrents.torrentid = t.id)
  7.                 AS readtorrent" : ", 1 AS readtorrent") . " FROM torrents AS t LEFT JOIN categories
  8.                 AS c ON t.category = c.id LEFT JOIN incategories AS i ON t.incategory = i.id LEFT JOIN 3d AS d ON t.tryd = d.id
  9.                 LEFT JOIN voice AS v ON t.voice = v.id LEFT JOIN webdl AS w ON t.webdl = w.id
  10.                 LEFT JOIN users AS u ON t.owner = u.id $where $orderby $limit";
  11.    // echo $query_string;
  12.         $res = sql_query($query) or die(mysql_error());
2. andrewkard - 24 Мая, 2018 - 11:18:48 - перейти к сообщению
Меняем
PHP:
скопировать код в буфер обмена
  1.  
  2. if (!@mysql_connect($mysql_host, $mysql_user, $mysql_pass))
  3.                 die("[" . mysql_errno() . "] dbconn: mysql_connect: " . mysql_error());
  4.  


на

PHP:
скопировать код в буфер обмена
  1.  
  2. $link = mysqli_connect("localhost", "my_user", "my_password", "world");
  3.  
  4. /* check connection */
  5.     printf("Connect failed: %s\n", mysqli_connect_error());
  6.     exit();
  7. }
  8.  


Это не нужно:
PHP:
скопировать код в буфер обмена
  1.  
  2.  mysql_select_db($mysql_db)
  3.                 or die("dbconn: mysql_select_db: " . mysql_error());
  4.  


Это:

PHP:
скопировать код в буфер обмена
  1.  
  2. mysql_query("SET NAMES $mysql_charset");
  3.  


меняем на:
PHP:
скопировать код в буфер обмена
  1.  
  2. if (!mysqli_set_charset($link, "utf8")) {
  3.     printf("Ошибка при загрузке набора символов utf8: %s\n", mysqli_error($link));
  4.     exit();
  5. }
  6.  


Это:
PHP:
скопировать код в буфер обмена
  1.  
  2.  $res = sql_query($query) or die(mysql_error());
  3.  


меняем на:
PHP:
скопировать код в буфер обмена
  1.  
  2. $result = mysqli_query($link, $query)
  3.  


Так же обращаю внимание на необходимость использования подготовленных запросов:
http://php.net/manual/ru/mysqli.prepare.php
3. file.shreder - 24 Мая, 2018 - 22:17:44 - перейти к сообщению
Используй лучше какую то библиотеку готовую, для работы с БД. Мне нравится SafeMySQL.

PHP:
скопировать код в буфер обмена
  1. $db = new SafeMySQL();
  2.  
  3. $db->getRow("SELECT `id` FROM........")
  4.  
  5. $db->getAll("SELECT * FROM........")
  6.  
  7. $db->getOne("SELECT `id` FROM........")

 

Powered by ExBB FM 1.0 RC1