PDA

Επιστροφή στο Forum : Πρόβλημα με το mysqli extension της php



kenji
10-05-06, 22:48
Οι περιπέτειες του μικρού ΝικόλαΘαΗθελαΝαΤοΚανωΝαΤρεχει συνεχίζονται.

'Εχω το εξής πρόβλημα. Δεν μπρορώ με τίποτα να κάνω query να τρέχει με το msqli. 'Εχω εγκατεστημένο wamp την τελευταία έκδοση, σε xp. 'Εχω δοκιμάσει με διάφορα tutorial έχω ψάξει στο Internet δε μπόρεσα να βγάλω άκρη. Σε ένα ποστ, ούτε που θυμάμαι σε ποιο site από τα τόσα που έψαξα, κάποιος έλεγε ότι αυτό είναι bug της php5 για μηχανήματα με cpu 64bit.

Μήπως μπορεί να δώσει κάποιος μια βοήθεια, μια ιδέα τι μπορεί να γίνεται λάθος? Αυτό που ήθελα να κάνω, το έχω καταφέρει με τον κλασικό τρόπο, αλλά θα ήθελα αν γίνεται να χρησιμοποιήσω το mysqli..

bill2003
11-05-06, 09:30
Κάνε post έναν απλό κώδικα από αυτό που δεν σου τρέχει να δούμε γιατί ;)

Και εγώ AMD 64 έχω και όλα πάνε κανονικα...

kenji
11-05-06, 11:20
Βασίλη αυτό που είχα γράψει το έχω σβήσει.

Το πιο απλό όμως που είχα προσπαθήσει, αφού είχα απογοητευτεί ήταν ο κώδικας του tutorial για το Mysqli στο site της zend. copy paste χωρίς να αλλάξω κάτι. Σε ότι και να προσπάθησα μου έκανε κανονικά connect αλλά μου έλεγε ότι το bind_param έχει περισσότερες μεταβλητές από το mysqli->prepare. Ακόμα και αυτό που ήταν copy paste δε δούλευε. Είχα φτιάξει ήδη μια βάση και το πίνακα του παραδείγματος στην mysql.

http://www.zend.com/php5/articles/php5-mysqli.php#Heading11

Θέμα κώδικα δεν νομίζω να είναι. Δε τρέχουν ούτε τα tutorial. Με mysql μπρορώ να κάνω κανονικά queries με τη βάση. Μήπως έχεις κάποια ιδεά? :)

bill2003
11-05-06, 11:30
Ας πάμε σε ένα ποιο απλό παράδειγμα ώστε να αποκλείουμε περιπτώσεις μία μία...

Κάνε copy paste σε ένα test.php το Example 1 ή 2 (το ίδιο είναι) από εδώ:
http://gr.php.net/manual/en/function.mysqli-connect.php

και δες αν τρέχει σωστά για αρχή. Λογικά θα πρέπει να σου βγάλει:

Host information: localhost via TCP/IP

Παίζει σωστά?

kenji
11-05-06, 11:36
Βασίλη αυτό τρέχει κανονικά.

Connection και πριν κανονικά μου έκανε. Δώσε μου 5 λεπτά να το ξανατρέξω και να σου δείξω τι ακριβώς μου βγάζει.

Βασίλη ευχαριστώ. :)

EvilHawk
11-05-06, 11:39
Δεν βοηθάς καθόλου με τα στοιχεία που έδωσες.
Λειτουργικο, web server, εκδόσεις php & mysql , πώς έγιναν εγκτάσταση ?

kenji
11-05-06, 11:43
Τρέχω το εξής. Είναι από το tutorial του link που έδωσα:



include "config.php";
$mysqli = new mysqli($localhost,$user, $pass, $db);

if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}

$stmt = $mysqli->prepare("INSERT INTO countrylanguage VALUES (?, ?, ?, ?)");
$stmt->bind_param('sssd', $code, $language, $official, $percent);

$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 11.2;

$stmt->execute();
$stmt->close();
$mysqli->close();


Μου πετάει μήνυμα λάθους το εξής.


Warning: mysqli_stmt::bind_param() [function.mysqli-stmt-bind-param (http://localhost/test/function.mysqli-stmt-bind-param)]: Number of variables doesn't match number of parameters in prepared statement in

EvilHawk έχεις δίκιο gomen. Έχω xp pro με service pack 2, και έχω εγκατεστημένο το wamp v. 1.6.3. Αυτό εγκαθηστά την PHP 5.1.4, Apache 2.0.55, MySQL 5.0.21

EvilHawk
11-05-06, 11:53
Μου φάινεται ότι είδα το συγκεκριμένο πρόβλημα να δηλώνετε χθές σαν verified bug στην 5.0.21 ...
Αν βρώ χρόνο θα το ψάξω να σου δώσω link!

kenji
11-05-06, 11:58
EvilHawk arigato. :)

Θα δοκιμάσω να βάλω μια μικρότερη έκδοση του wamp να δω αν τρέχει και θα σας πω. Εγώ σε ένα post, θυμάμαι ότι κάποιος κάτι είχε πει για bug αλλά μέσα στα τόσα που έψαξα δε θυμάμαι που το βρήκα.

kenji
11-05-06, 12:52
Δοκίμασα το ίδιο script σε ένα άλλο μηχάνημα, με win xp pro service pack 2 και με το wamp 1.6.3 και με το wamp 1.6.1, το οποίο εγκαθιστά php 5.1.2, mysql 5.0.18 και apache 2.0.55. Δυστυχώς παλι το ίδιο πρόβλημα. :cry:

EvilHawk
11-05-06, 14:14
Το παράδειγμα που σου ανέφερε παραπάνω ο bill2003 τρέχει? και τι output σου βγάζει?

btw υποθέτω ότι στο παράδειγμα που δεν σου δουλεύει χρησιμοποίεις το δείγμα database "world" που βρήκες εδώ: http://downloads.mysql.com/docs/world.sql έτσι δεν ειναι?

kenji
11-05-06, 15:23
EvilHawk το παράδειγμα του bill2003 μου τρέχει κανονικά και μου βγάζει και μένα

Host information: localhost via TCP/IP

Δε χρησιμοποίησα εκείνη τη βάση. Απλά έφτιαξα μια κενή βάση με όνομα country, και με πεδία ίδιο όνομα με τις μεταβλητές $code, $language, $official, $percent)(char, char, char, double) και αυτή βάζω στο όρισμα. Τις μεταβλητές $localhost,$user, $pass, $db τις ορίζω μέσα στο config.php. Αυτό το κομμάτι είναι γραμμένο σωστά μιας και το connection μου το κάνει και βγάζει το ίδιο αποτέλεσμα και με το παράγειδμα του bill2003 αλλά και στον κώδικα που παρέθεσα πριν δε χτυπάει το connection πριν πάει να εκτελέσει το query.

Έκανα και δεύτερη βάση world με τo table countrylanguage από το link που έδωσες. Πάλι το ίδιο μου βγάζει EvilHawk.

EvilHawk
11-05-06, 15:48
Βεβαιώσου ότι στο σύστημα σου έχεις μόνο μια έκδοση libmysql.dll και php_mysqli.dll ...

kenji
11-05-06, 15:59
EvilHawk εννοείς μήπως έχει μείνει κανένα τέτοιο αρχείο από το xampp ή από τις προηγούμενη εγκατάστη του wamp?

EvilHawk
11-05-06, 16:02
Nαι και να φροντίσεις php kai mysql να εχουν την ίδια έκδοση libmysql.dll

kenji
11-05-06, 16:15
Έχω ένα αρχείο php_mysqli.dll και 3 αρχεία libmysql.dll το καθένα στο φάκελο bin tτου apache, mysql, php. Από που μπορώ να δω τα συγκεριμένα τι έκδοση είναι?

EvilHawk
11-05-06, 16:20
Με δεξί click & μετά properties.
Βάλε παντού αυτό που έχει στον φάκελο του php για σιγουριά (κάνε rename τα άλλα και copy paste αυτο της php).

kenji
11-05-06, 16:42
Γράφω αναλυτικά τι έχω κάνει.

Mε ένα search για libmysql.dll βρίσκω 3 αρχεία στα directories
D:\wamp\php
D:\wamp\Apache2\bin
D:\wamp\mysql\bin

Mε ένα search gia php_mysqli.dll βρίσκω ένα αρχείο στο directory
D:\wamp\php\ext

Ta properties του libmysql.dll δεν έχουν version. Στο proterties bar του exlorer έχω ενεργοποιημένη την επιλογή file version. To php_mysqli.dll είναι version 5.1.2.2


Κάνω copy paste το php_mysqli.dll στα παραπάνω directories. Tο κάνω rename σε libmysql.dll και στις 3 περιπτώσεις. Το λάθος που μου βγάζει τώρα είναι το εξής.



Fatal error: Class 'mysqli' not found in...

bill2003
11-05-06, 17:08
Τώρα έκλεισες τελείως το mysqli...

Πάντως προσπάθησα να τρέξω το παραπάνω παράδειγμα και εγώ που το σύστημα μου είναι (ελπίζω :lol:) σωστά στημένο και μου βγάζει το ίδιο warning... Δεν προλαβαίνω να το ψάξω σήμερα περισσότερο. Ίσως απλά να είναι ένα bug της mySQL όπως είπε και ο EvilHawk και να μην μπορείς κάτι...

Γιατί είπαμε δεν χρησιμοποιείς τις κλασικές συναρτήσεις mysql που παίζουν μια χαρά ??

kenji
11-05-06, 17:22
bill2003 δεν είπα ότι δεν τις χρησιμοποίησα. Αντιθέτως είπα ότι τελικά χρησιμοποίησα αυτές αντί για το mysqli.

Μιας που μέσω της εργασίας μαθαίνω php και mysql για πρώτη φορά στη ζωή μου, την οποία όμως χρειάζομαι και για διπλωματική μου, είπα να το σκαλίσω όσο μπορώ περισσότερο. Ευτυχώς που οι συναρτήσεις της mysql τρέξαν αμέσως γιατί μετά την αρχική ήττα του exec και μετά του mysqli(εξακολουθεί να προηγείται στο σκορ το άτιμο) θα πάθαινα εγκεφαλικό.

Τουλάχιστον στα πειράματα έχω συμπαράσταση. Κάτι είναι και αυτό.:oneup: btw σαν παρα-ιατρικός θα σου πω χίλιες φορές πειράματα σε μηχάνημα παρά στα καΰμένα τα ζωάκια. :)

Σας ευχαριστώ για τη βοήθεια. :)

EvilHawk
11-05-06, 18:17
Γράφω αναλυτικά τι έχω κάνει.

Mε ένα search για libmysql.dll βρίσκω 3 αρχεία στα directories
D:\wamp\php
D:\wamp\Apache2\bin
D:\wamp\mysql\bin

Mε ένα search gia php_mysqli.dll βρίσκω ένα αρχείο στο directory
D:\wamp\php\ext

Ta properties του libmysql.dll δεν έχουν version. Στο proterties bar του exlorer έχω ενεργοποιημένη την επιλογή file version. To php_mysqli.dll είναι version 5.1.2.2


Κάνω copy paste το php_mysqli.dll στα παραπάνω directories. Tο κάνω rename σε libmysql.dll και στις 3 περιπτώσεις. Το λάθος που μου βγάζει τώρα είναι το εξής.




Αυτό που σου είχα πεί να κάνεις είναι να κάνεις rename το libmysql.dll που υπάρχουν στον φάκελο apache & mysql και να αντιγράψεις σε αυτά το libmysql.dll της php! ;)

Αν και αυτό δεν δουλέψει σηκώνω τα χέρια ψηλά !

kenji
11-05-06, 18:34
EvilHawk λάθος κατάλαβα. :oops:

Το δοκίμασα και το τελευταίο και το μήνυμα λάθους είναι το ίδιο όπως εξαρχής.



Warning: mysqli_stmt::bind_param() [function.bind-param]: Number of variables doesn't match number of parameters in prepared statement in ...


Ευχαριστώ πολύ πάντως. :)

Ελπίζω κάπως να βρεθεί η άκρη έτσι για το γ@μωτο της υπόθεσης. :angryr:

@ ADSLgr.com All rights reserved.