PHP/MySQL fejlkode i Linux

Tags:    php mysql undefined method linux

Hej udviklere !

Jeg er stødt på et problem med PHP/MySQL kørt på en Apache2 server, på en Knoppix 7.7/Debian Linux installation på en USB memory stick, med Firefox browser.

Præcis samme script i en php-fil kørt under Apache serveren i XAMPP under Windows 10, fungerer helt fint, og giver ingen fejl.

Fejlen handler om undefined method. Jeg fik i sin tid hjælp her på siden af Ronny Olsen, til at lave scriptet til php-filen, som altså fungerer fint under Windows.

[code lang="PHP"][/<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="da" lang="da">

<head>
<title>CD albums</title>
<style>
body {
background-image: url("http://www.bizdata.be/files/modules/blokken/101/CD_Collections.jpg");
}


<style type="text/css">
body {background:#A30000;
color:yellow;
h1 {color:yellow;}
h3 {color:yellow;}

</style>
</head>
</html>


<?php
/* bør ligge i externe filer start */
// slå debug info til
define('IN_DEBUG_MODE', true); // Sæt til false i production mode
if (IN_DEBUG_MODE) {
ini_set("display_startup_errors", "on");
ini_set("display_errors", "on");
ini_set("html_errors", "false");
error_reporting(-1); // -1 viser alle slags fejl beskeder
ini_set("ignore_repeated_errors", 0);
} else {
// Turn off all error reporting
error_reporting(0);
}

// opret database forbindelse
$conn = new mysqli("localhost", "root", "poe039", "cd_databasen_v3_0_browser");
if (!$conn) {
echo 'Der opstod en fejl.';
exit();
}
// mysqli_set_charset($conn, "utf8_danish_ci");
$conn->set_charset("utf8_danish_ci");
/* bør ligge i externe filer slut */


$search = $_GET['navn'];
$sql = "select k.Kunstner,c.Albumtitel,t.track_title as Nummertitel,t.track_number as Nr,
c.Release_Year,c.EAN_code

from Kunstnere as k inner join CD_Albumtitler as c
on k.kunstner_id = c.kunstner_id
inner join Track_lists as t
on t.titel_id = c.titel_id

where Albumtitel like '%" . $search . "%' order by Release_Year, Nr";
// echo $sql. "<br>"; // test ser sql ud som jeg forventer ??
$result = $conn->query($sql) or die($conn->error());
if ($result->num_rows > 0) {
// output data of each row


while ($row = $result->fetch_assoc()) {
echo "<font color='white'>Kunstner: " . $row["Kunstner"] . " - Albumtitel: " . $row["Albumtitel"] . " - Nummertitel: " . $row["Nummertitel"] .
" - Nr: " . $row["Nr"] .
" - EAN kode: " . $row["EAN_code"] . " - Udgivelsesår: " . $row["Release_Year"] . "<br>" ;
}
} else {
echo "<font color='white'>Intet resultat fundet";
}

$conn->close();

?>

<html>
<br>
<form>
<input class="MyButton" type="button" value="Ny CD søgning" onclick="window.location.href='http://localhost/Phpkursus/CD Databasen/cdindex/cdindex.htm'" />
</form>
<br>
<form>
<input class="MyButton" type="button" value="Retur til startside" onclick="window.location.href='http://localhost/Phpkursus/index'" />
</form>
<br>
</html>]
Fejlkoden når det køres i Knoppix/Debian Linux er :

Fatal error:Call to undefined method mysqli::error() in /UNIONFS/ /sti til filen/check.php on line 63


Jeg ved ikke om det kan have noget med config af Apache2 serveren at gøre, men jeg håber nogen kan hjælpe mig.

På forhånd tak. :)




Indlæg senest redigeret d. 30.01.2017 23:02 af Keld M Hansen
5 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Udskift
Fold kodeboks ind/udKode 
med
Fold kodeboks ind/udKode 




ja der er vist sket noget afsmitning fra procedural style til oop style
$result = $conn->query($sql) or die($conn->error());
skal selvføgelig være
$result = $conn->query($sql) or die($conn->error); // OOP anbefalet
eller
$result = $conn->query($sql) or die( mysqli_error ($conn)); // procedural style

som henvist/skrevet af de 2 andre

men ud over det, burde error nok have været en metode, så man ikke tilgår property direkte IMHO


når den kommer til at ville udfører or die, har du nok en sql fejl, der trigger den.


Med Venlig Hilsen
Ronny Olsen
http://olsensweb.dk

mysqli har ikke en error() funktion.

Det er blot en property til objektet.

http://php.net/manual/en/mysqli.error.php

Uvirkelig virkelighed
Se de fantastiske billeder på miclarsen.dk eller gør som mange andre,
følg med bag kulisserne

mysqli har ikke en error() funktion.

Det er blot en property til objektet.

http://php.net/manual/en/mysqli.error.php


Hej Michael og mange tak for dit svar !

Den fejl der returneres når php scriptet køres handler om undefined method. Jeg går ud fra at mysqli er en nyere metode til kontakt med databaserne, men jeg kan ikke umidelbart gennemskue hvad der går galt, og som nævnt fungerer scriptet også uden problemer når det køres i Apache XAMPP under Windowsplatformen.

Har du nogle forslag til hvad der her ikke er defineret ?

Der angives noget med linje 63 i fejlmeddelelsen, men erfaringen siger mig at den slags meddelelser i SQL ikke nødvendigvis peger på den rigtige linje, eller linjeangivelsen er lidt svær at gennemskue.

Mysqli kender vel godt funktionen or die (linje 63) ?

Håber du, eller andre, kan spore mig lidt mere ind på hvad der egentlig er galt.

Tak

PS Jeg skal i øvrigt beklage at jeg ikke fik pakket kildekoden ind på den rigtige måde da jeg åbnede tråden.



Udskift
Fold kodeboks ind/udKode 
med
Fold kodeboks ind/udKode 


Hej Robert !

Tusind tak for dit svar. Det løste mit problem at udskifte

Fold kodeboks ind/udPHP kode 
med

Fold kodeboks ind/udPHP kode 


Jeg skulle så også ændre et par tabelnavne, fordi MySQL under pågældende Linux er ret meget case sensitive, mens jeg er vant til at både MySQL og T-SQL under Windows er ret ligeglad med store og små bogstaver.

Endnu en gang tak ! :)



Indlæg senest redigeret d. 31.01.2017 14:47 af Keld M Hansen
t