new mysqli mit chr($i) zu new pdo

Loddar1

Erfahrenes Mitglied
Hallo liebe Gemeinde,
Ich habe mal wieder totale unkenntnis schon by new mysqli:
Mein Code der funktioniert aber ist nicht wirklich gut geschrieben
PHP:
$con = new mysqli($_hostname,$_username,$_password,$_database) or die ();

$sel = isset($_GET['sel']) ? $_GET['sel'] : '0';

$anuser='<select method="post" name="an">';

for ($i = 97; $i <= 122; $i++)
{
   
   $stmt = $con->prepare("SELECT id,username FROM tabelle WHERE username LIKE '".chr($i)."%' ORDER BY username ASC");

   $stmt->execute();
 
   $result = $stmt->get_result();
   $anuser.='<optgroup label="'.locpas(chr($i)).'">';
 
while ($row = $result->fetch_assoc())
        {
            $sel = "";
            if($vonid==$row['id'])$sel=' selected';
            $anuser.='<option value="'.$row['id'].'" '.$sel.'>'.$row['username'].'</option>';
        }
$anuser.='</optgroup>';
}
$anuser.='</select>';
Das mit dem LIKE '".chr($i)."%' ist wohl nicht richtig
Ich weiss aber nicht weiter denn mit pdo funktioniert das garnicht.

für pdo habe ich das bisher so:
PHP:
$pdo = new PDO("mysql:host=" . DB_SERVER . ";dbname=" . DB_NAME, DB_USERNAME, DB_PASSWORD);

$sel = isset($_GET['sel']) ? $_GET['sel'] : '0';

$anuser='<select method="post" name="an">';
for ($i = 97; $i <= 122; $i++)
{
  $stmt = $pdo->prepare("SELECT id,username FROM tabelle WHERE username LIKE '".chr($i)."%' ORDER BY username ASC");
    $stmt->execute();
    $anuser.='<optgroup label="'.chr($i).'">';
        while ($lo = $stmt->fetch())
        {
        $sel = "";
if($vonid==$userID)$sel=' selected';
$anuser.='<option value="'.$lo['userid'].'" '.$sel.'>'.$lo['username'].'</option>';
}
$anuser.='</optgroup>';
}
$anuser.='</select>';

ich denke das das nicht funktionieren mit pdo an LIKE '".chr($i)."%' liegt,
weis jemand wie das richtig geschrieben wird?

wie es ohne '".chr($i)."%' geschrieben wird weiss ich.

Danke im vorraus Loddar1
 
Zuletzt bearbeitet:
Und die Usernamen BEGINNEN bei dir alle mit KLEIN-Buchstaben?
wie es ohne '".chr($i)."%' geschrieben wird weiss ich.
Und wenn du das mal hier posten würdest?

PHP:
$anuser.='<option value="'.$lo['userid'].'" '.$sel.'>'.$lo['username'].'</option>';
Es gibt kein Feld namens "userid" in deinem Resultset.......
 
Hallo liebe Gemeinde,
Ich habe mal wieder totale unkenntnis schon by new mysqli:
Mein Code der funktioniert aber ist nicht wirklich gut geschrieben
PHP:
$con = new mysqli($_hostname,$_username,$_password,$_database) or die ();

$sel = isset($_GET['sel']) ? $_GET['sel'] : '0';

$anuser='<select method="post" name="an">';

for ($i = 97; $i <= 122; $i++)
{
  
   $stmt = $con->prepare("SELECT id,username FROM tabelle WHERE username LIKE '".chr($i)."%' ORDER BY username ASC");

   $stmt->execute();
 
   $result = $stmt->get_result();
   $anuser.='<optgroup label="'.locpas(chr($i)).'">';
 
while ($row = $result->fetch_assoc())
        {
            $sel = "";
            if($vonid==$row['id'])$sel=' selected';
            $anuser.='<option value="'.$row['id'].'" '.$sel.'>'.$row['username'].'</option>';
        }
$anuser.='</optgroup>';
}
$anuser.='</select>';
Das mit dem LIKE '".chr($i)."%' ist wohl nicht richtig
Ich weiss aber nicht weiter denn mit pdo funktioniert das garnicht.

für pdo habe ich das bisher so:
PHP:
$pdo = new PDO("mysql:host=" . DB_SERVER . ";dbname=" . DB_NAME, DB_USERNAME, DB_PASSWORD);

$sel = isset($_GET['sel']) ? $_GET['sel'] : '0';

$anuser='<select method="post" name="an">';
for ($i = 97; $i <= 122; $i++)
{
  $stmt = $pdo->prepare("SELECT id,username FROM tabelle WHERE username LIKE '".chr($i)."%' ORDER BY username ASC");
    $stmt->execute();
    $anuser.='<optgroup label="'.chr($i).'">';
        while ($lo = $stmt->fetch())
        {
        $sel = "";
if($vonid==$userID)$sel=' selected';
$anuser.='<option value="'.$lo['userid'].'" '.$sel.'>'.$lo['username'].'</option>';
}
$anuser.='</optgroup>';
}
$anuser.='</select>';

ich denke das das nicht funktionieren mit pdo an LIKE '".chr($i)."%' liegt,
weis jemand wie das richtig geschrieben wird?

wie es ohne '".chr($i)."%' geschrieben wird weiss ich.

Danke im vorraus Loddar1
Habe die richtige schreibweise gefunden und es funktioniert!

PHP:
$pdo = new PDO("mysql:host=" . DB_SERVER . ";dbname=" . DB_NAME, DB_USERNAME, DB_PASSWORD);

$sel = isset($_GET['sel']) ? $_GET['sel'] : '0';

$anuser='<select method="post" name="an">';
for ($i = 97; $i <= 122; $i++)
{
  $taba = chr($i).'%';
  $stmt = $pdo->prepare("SELECT id,username FROM tabelle WHERE username LIKE :taba ORDER BY username ASC");
    $stmt->execute();
    $anuser.='<optgroup label="'.chr($i).'">';
        while ($lo = $stmt->fetch())
        {
        $sel = "";
if($vonid==$userID)$sel=' selected';
$anuser.='<option value="'.$lo['userid'].'" '.$sel.'>'.$lo['username'].'</option>';
}
$anuser.='</optgroup>';
}
$anuser.='</select>';
 
Hallo Zwoni
tut mir leid mit den schreibfehlern wollte das beides gleich aussieht.
Hier ist jetzt der funktionierende Code:
PHP:
$pdo = new PDO("mysql:host=" . DB_SERVER . ";dbname=" . DB_NAME, DB_USERNAME, DB_PASSWORD);

$userID = $sessin['id'];

$sel = isset($_GET['sel']) ? $_GET['sel'] : '0';

$anuser='<select method="post" name="an">';
for ($i = 97; $i <= 122; $i++)
{
  $taba = chr($i).'%';
 
  $stmt = $pdo->prepare("SELECT id,username FROM tabelle WHERE username LIKE :taba ORDER BY username ASC");
    $stmt->bindParam(':taba', $taba, PDO::PARAM_STR);
    $stmt->execute();
    $anuser.='<optgroup label="'.chr($i).'">';
        while ($row = $stmt->fetch())
        {
        $sel = "";
if($vonid==$userID)$sel=' selected';
$anuser.='<option value="'.$row['id'].'" '.$sel.'>'.$row['username'].'</option>';
}
$anuser.='</optgroup>';
}
$anuser.='</select>';

Das bindParam hat gefehlt

Sorry das ich schreibfehler hatte aber ich hatte das chr($i).'%'; falsch übernommen.
Es ist mir erst nach dem Posten aufgeallen.
 
Ich würde noch empfehlen, statt 26 mal ein Select loszuschicken, nur eins zu schicken. Du hast sowieso schon ein "order by username" drin.
Die optgroup würde ich dann nur setzen, wenn sich der Anfangsbuchstabe des Namens ändert, d.h. einmal zu Beginn, und dann, wenn er wechselt.

Das hat auch noch den Vorteil, dass du nicht nur Namen mit ASCII-Buchstaben am Anfang mitnimmst, sondern alle (z.Bsp. Ücker Peter). Und es keine leeren optgroup-Einträge gibt, es sei denn, die sind gewünscht.
 
Zurück