PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQLi/PDO/(MySQL) (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   PR6 Link für Umbau auf PHP MYSQLi Abfrage (http://www.selfphp.de/forum/showthread.php?t=23107)

Joschi 09.04.2010 20:17:25

PR6 Link für Umbau auf PHP MYSQLi Abfrage
 
Hallo,

aus lauter Verzweifelung biete ich demjenigen der als erster die Problemlösung postet einen dauerhaften Link von einer Pagerank 6 Seite an (Ausnahme sind nach deutschem Recht verbotenen Seiten.).

Meine bisherige Query sieht wie folgend aus:
PHP-Code:

$db = @new mysqli('localhost''root''''test');
if (
mysqli_connect_errno()) {
    die (
'Konnte keine Verbindung zur Datenbank aufbauen: '.mysqli_connect_error().'('.mysqli_connect_errno().')');
}
/* change character set to utf8 */
if (!mysqli_set_charset($db"utf8")) {
   
printf("Error loading character set utf8: %s\n"mysqli_error($db));
}

$sql "SELECT 
                        * 
                    FROM
                        daten as data
                    LEFT JOIN produkt as prod ON prod.id=data.produkt_id 
                    LEFT JOIN anbieter as anb ON anb.id=prod.id_anbieter 
                    WHERE 
                        data.1_min <= 15 AND data.1_max >= 15 AND
                        data.2_min <=10 AND data.2_max >=10 AND 
                        data.3_min <=5 AND data.3_max >=5 AND 
                        data.4_min <=6 AND data.4_max >=6
                    GROUP BY 
                        data.produkt_id 
                    ORDER BY 
                        data.preis 
                    ASC"
;

$stmt $db->prepare($sql);
$stmt $db->query($sql);        

if (!
$stmt) {
    die (
'Konnte den Folgenden Query nicht senden: '.$sql."<br />\nFehlermeldung: ".$db->error);
}
if (!
$stmt->num_rows) {
        echo 
$sql;
    echo 
'<p class="info">Leider nichts gefunden.</p>';
} else {

    while (
$row $stmt->fetch_assoc()) {
            echo 
'<b>'.$row['anbieter'].'</b> '.$row['adresse']."<br>\n";
            echo 
' '.$row['beschreibung']."<br>\n";
            echo 
' '.$row['zustand']."<br>\n";
            echo 
' '.$row['preis']."<br><br>\n";
    }
   


Der MYSQL Query soll nun mit den per GET übergebenen Werten gefüttert werden . Sprich es müssen nun für die Werte im MYSQL String "Prepared Statements" (Für die Zahlen 15,10,5,6 ) geschaffen werden. Und entsprechend die IF Anweisungen angepasst. Wer als erstes eine funktionsfähige MYSQLi Version postet bekommt den oben beschriebenen Link.

Danke

urvater 10.04.2010 07:58:06

AW: PR6 Link für Umbau auf PHP MYSQLi Abfrage
 
Vielleicht fällt dir ja der Unterschied zu deinem bisherigen auf.
PHP-Code:

<?php
$mysqli 
= new mysqli("localhost""my_user""my_password""world");

/* check connection */
if (mysqli_connect_errno()) {
    
printf("Connect failed: %s\n"mysqli_connect_error());
    exit();
}

$city "Amersfoort";

/* create a prepared statement */
if ($stmt $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {

    
/* bind parameters for markers */
    
$stmt->bind_param("s"$city);

    
/* execute query */
    
$stmt->execute();

    
/* bind result variables */
    
$stmt->bind_result($district);

    
/* fetch value */
    
$stmt->fetch();

    
printf("%s is in district %s\n"$city$district);

    
/* close statement */
    
$stmt->close();
}

/* close connection */
$mysqli->close();
?>

Besonders auf bind_param(),execute(), fetch() und close() würde ich achten.

Ckaos 10.04.2010 09:12:54

AW: PR6 Link für Umbau auf PHP MYSQLi Abfrage
 
Hi

wie heissen die
Zitat:

mit den per GET übergebenen Werten
denn?
und warum müssen
Zitat:

die IF Anweisungen angepasst
werden?

ansonsten mal wieder ins dunkle geschossen...
mysqli_way?
PHP-Code:

$sql "SELECT 
                        * 
                    FROM
                        daten as data
                    LEFT JOIN produkt as prod ON prod.id=data.produkt_id 
                    LEFT JOIN anbieter as anb ON anb.id=prod.id_anbieter 
                    WHERE 
                        data.1_min <= ? AND data.1_max >= ? AND
                        data.2_min <=? AND data.2_max >=? AND 
                        data.3_min <=? AND data.3_max >=? AND 
                        data.4_min <=? AND data.4_max >=?
                    GROUP BY 
                        data.produkt_id 
                    ORDER BY 
                        data.preis 
                    ASC"
;

$stmt->bind_param("iiiiiiii",$_GET['w1'],$_GET['w1'],$_GET['w2'],$_GET['w2'],$_GET['w3'],$_GET['w3'],$_GET['w4'],$_GET['w4']); 

PHPway
PHP-Code:

//ausgedachte GET WERTE w1,w2,w3,w4
If($_GET['w1']){
     
$where_data[] = "data.1_min <="$_GET['w1'];
     
$where_data[] = "data.1_max >="$_GET['w1'];
}
If(
$_GET['w2']){
     
$where_data[] = "data.2_min <="$_GET['w2'];
     
$where_data[] = "data.2_max >="$_GET['w2'];
}
If(
$_GET['w3']){
     
$where_data[] = "data.3_min <="$_GET['w3'];
     
$where_data[] = "data.3_max >="$_GET['w3'];
}
If(
$_GET['w4']){
     
$where_data[] = "data.4_min <="$_GET['w4'];
     
$where_data[] = "data.4_max >="$_GET['w4'];
}
if(
is_array($where_data)){
     
$where_sql " WHERE ".implode(' and ',$where_data);
}

$sql "SELECT 
                        * 
                    FROM
                        daten as data
                    LEFT JOIN produkt as prod ON prod.id=data.produkt_id 
                    LEFT JOIN anbieter as anb ON anb.id=prod.id_anbieter 
                    "
.$where_sql."
                    GROUP BY 
                        data.produkt_id 
                    ORDER BY 
                        data.preis 
                    ASC"


Auf Überprüfung deiner GET werte bin ich bewusst nicht eingegangen.
Beachte bitte auch Urvater's Anmerkung.


mfg

Ckaos

Joschi 10.04.2010 09:38:18

AW: PR6 Link für Umbau auf PHP MYSQLi Abfrage
 
Hi

ich habe jetzt testweise mal den MYSQLi way komplett eingebaut.

Zitat:

Fatal error: Call to a member function bind_param() on a non-object in test-mysqli.php on line 34
Also der neue Ausdruck.

Also habe ich alles auf Anfang. Ich habe nur ein ? eingesetzt und das GET durch einen festen Wert ersetzt.

PHP-Code:

$testwert=45;
$stmt->bind_param("i",$testwert);
$stmt $db->prepare($sql);
$stmt $db->query($sql); 

Aber auch hier:
Zitat:

Fatal error: Call to a member function bind_param() on a non-object in test-mysqli.php on line 34
Komisch.

Joschi 10.04.2010 09:41:42

AW: PR6 Link für Umbau auf PHP MYSQLi Abfrage
 
Zitat:

Hi

wie heissen die
Zitat:
mit den per GET übergebenen Werten
denn?
Du hast in deinem Codebeispiel bereits die richtigen GET Variablen genommen.

Zitat:

und warum müssen
Zitat:
die IF Anweisungen angepasst
werden?
Ich hatte das in den Dokus so verstanden, leider sind hier ja nur INSERT und keine SELECT Anfragen definiert.

Ckaos 10.04.2010 09:48:42

AW: PR6 Link für Umbau auf PHP MYSQLi Abfrage
 
Hi

ich bin davon ausgegangen das du alle Beiträge liest ;)
Wie in Urvater's Beitrag schon dargelegt kommt bind_param
nach prepare.
Schau dir das bitte genauer an und versuche meinen Ansatz entsprechend
einzuarbeiten.

mfg

Ckaos

Ckaos 12.04.2010 00:20:10

AW: PR6 Link für Umbau auf PHP MYSQLi Abfrage
 
Hi

hat nun jemand den PR6 gewonnen? ;)
Könnt den gut für mein Facebookapp gebrauchen *hust

mfg

Ckaos


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:54:23 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.