Mysql_query átírás $mysqli->query -re (vagyis PHP5 -ről PHP7-re)
2021-05-26T15:01:42+02:00
2021-05-27T11:45:16+02:00
2022-08-12T02:55:29+02:00
menyusa
Üdv!

Évek óta nem foglalkoztam PHP-val így a PHP 7 kimaradt.
Úgy hozta a sors, hogy egy régi PHP 5-ben írt programot szeretnék PHP 7 kompatibilissá tenni, de elakadtam.
 
Eredeti kód :

$eredmeny = "SELECT *, floor(DATEDIFF(now(), szuldat)/365.2425) as age FROM login 
 LEFT JOIN images ON (login.nev = images.lognev)
 WHERE ((floor(DATEDIFF(now(), szuldat)/365.2425)) BETWEEN '$kora' AND '$kora2')
 AND (login.nemed LIKE '%$nemek%') GROUP BY login.nev LIMIT 0, 30 "; 

$row = mysql_query($eredmeny); 
if (isset($row) && !empty($row))
$row_cell = mysql_fetch_assoc($row); 
$talalat=(mysql_num_rows($row));
---------------------------------------------------------------------

Átírt PHP 7-re:

$eredmeny = "SELECT *, floor(DATEDIFF(now(), szuldat)/365.2425) as age FROM login 
 LEFT JOIN images ON (login.nev = images.lognev)
 WHERE ((floor(DATEDIFF(now(), szuldat)/365.2425)) BETWEEN '$kora' AND '$kora2')
 AND (login.nemed LIKE '%$nemek%') GROUP BY login.nev LIMIT 0, 30 "; // 30-al limitálva

$row =  $mysqli->query($eredmeny); 
if (isset($row) && !empty($row))
$row_cell = $row -> fetch_assoc();
$row -> free_row();
$talalat=(mysqli_num_rows($row));


Azonban elszáll hibával: Fatal error: Call to a member function query() on null in......on line 45

Előre is köszi!
Mutasd a teljes hozzászólást!
Hali!

Valahol itt lesz a a gond.

Igen, valahol itt van a gond.

Adott a következő két kódrészlet (az első a te mintádhoz hasonló):
// 1. kódrészlet global $mysqli; function kapcs_tars() { $mysqli = 'Kukucs'; } var_dump($mysqli); // Eredménye: null // 2. kódrészlet function kapcs_tars() { global $mysqli; $mysqli = 'Kukucs'; } var_dump($mysqli); // Eredménye: string 'Kukucs' (length=6)
Szerinted, az első esetben miért null lesz, a második esetben meg miért string 'Kukucs' (length=6) a kiírás eredménye?

Más: miért használsz global-t? Miért nem adod vissza pl. a függvény eredményéül a kapcsolatot:
function kapcs_tars( string $host, string $username, string $password, string $dbname, int $port = 3306, string $charset = 'utf8mb4' ) { $mysqli = new \mysqli($host, $username, $password, $dbname, $port); if ($mysqli->connect_errno) { throw new \RuntimeException('Mysqli connection error: '.$mysqli->connect_error); } if (!$mysqli->set_charset($charset)) { throw new \RuntimeException('Mysqli error: '.$mysqli->error); } return $mysqli; } … require 'adatbazis.php'; try { $mysqli = kapcs_tars('localhost', 'user', 'pass', 'my_database'); } catch (\RuntimeException $e) { echo $e->getMessage(); die(); }
Mutasd a teljes hozzászólást!

  • Hali!

    Azonban elszáll hibával: Fatal error: Call to a member function query() on null…

    Értelmezd a hibát! Hint: létrehoztad a mysqli-objektumot (értsd: hol és hogy' kap értéket a $mysqli változód)?

    Mutasd a teljes hozzászólást!
  • Mutasd a teljes hozzászólást!
  • Felteszem az adatbázis kapcsolatra gondolsz.
    Azt külön egy "adatbazis" nevű PHP fájl "kapcs_tars()" függvényében tárolom:

    <?php 
    global $mysqli;

    function kapcs_tars()
    {
    $mysqli = new mysqli("localhost", "fh", "jsz","db"); 
    if ($mysqli -> connect_errno) {   echo "Failed to connect to MySQL: " . $mysqli -> connect_error;   exit();  } 
    }
    ?>

    Majd meghívom a szükséges fájlban :

    <?php 
    ob_start();
    session_start();
    include("adatbazis.php");
    kapcs_tars();
    ?>

    Valahol itt lesz a a gond.
    Előre is köszi!
    Mutasd a teljes hozzászólást!
  • Hali!

    Valahol itt lesz a a gond.

    Igen, valahol itt van a gond.

    Adott a következő két kódrészlet (az első a te mintádhoz hasonló):
    // 1. kódrészlet global $mysqli; function kapcs_tars() { $mysqli = 'Kukucs'; } var_dump($mysqli); // Eredménye: null // 2. kódrészlet function kapcs_tars() { global $mysqli; $mysqli = 'Kukucs'; } var_dump($mysqli); // Eredménye: string 'Kukucs' (length=6)
    Szerinted, az első esetben miért null lesz, a második esetben meg miért string 'Kukucs' (length=6) a kiírás eredménye?

    Más: miért használsz global-t? Miért nem adod vissza pl. a függvény eredményéül a kapcsolatot:
    function kapcs_tars( string $host, string $username, string $password, string $dbname, int $port = 3306, string $charset = 'utf8mb4' ) { $mysqli = new \mysqli($host, $username, $password, $dbname, $port); if ($mysqli->connect_errno) { throw new \RuntimeException('Mysqli connection error: '.$mysqli->connect_error); } if (!$mysqli->set_charset($charset)) { throw new \RuntimeException('Mysqli error: '.$mysqli->error); } return $mysqli; } … require 'adatbazis.php'; try { $mysqli = kapcs_tars('localhost', 'user', 'pass', 'my_database'); } catch (\RuntimeException $e) { echo $e->getMessage(); die(); }
    Mutasd a teljes hozzászólást!
  • Szia!

    Most lehet páran megköveznek.
    DE! ha nem akarsz global meg hasonlókkal küzdeni.
    tedd egy globális változó asszociatív tömbjébe a kapcsolatot. ( $_ENV )
    Így nem kell minden minden funkción belül is global -al meghívni,
    a rendszer alapból megteszi, és így egy kapcsolati hibával kevesebb.

    $_ENV['mysqli'] = new mysqli('localhost', 'my_user', 'my_password', 'my_db'); $_ENV['mysqli']->set_charset('utf8');
    Nem olyan szép, de biztos ott lesz a kapcsolat a 9. sub function -ba is.
    (A másik, ami számomra irritáló, minden query előtt csatlakozol, majd végén bontod.)
    Mutasd a teljes hozzászólást!
  • Köszi a tippet, megnézem ezt is.
    Nem bontom a kapcsolatot, csak most, a próbálkozásoknál hagytam benne az Exit() -et, de kiveszem a végleges verzióban..

    Köszi a segítséget.
    M.
    Mutasd a teljes hozzászólást!
  • A 2. kódrészlettel megyek tovább, ez már működik is, (nyilván így kap normális értéket).
    Nekem ez testhezállóbb egyenlőre, de elmentettem a függvényes megoldást is.
    Még egyszer köszi a segítséget!

    M.
    Mutasd a teljes hozzászólást!
abcd