Sida 1 av 1
mySQL-fråga
Postat: 7 juni 2022, 15:17:56
av SeniorLemuren
Jag sparar mailadressen vid beställning av ett objekt. eftersom en köpare kan registrera flera beställningar efter varandra så adderar jag ett datum-tid till mailadressen.
När jag sedan skriver ut kostnaden så skall den beräknas efter hur många item som finns på en viss mailadress.
Jag söker i databasen och hittar mailadresserna. Men hur ser jag sedan hur många träffar jag fått? Det står helt stilla nu för tiden så jag behöver hjälp.
Kod: Markera allt
<?php $query_order = "SELECT * FROM cc_kund WHERE mail like " . '"' . $userMail .'%"';
$result = $con->query($query_order);
$row = mysqli_fetch_array($result);
?>
Re: mySQL-fråga
Postat: 7 juni 2022, 15:29:06
av sodjan
Borde vara något slags "size" kommando på $row (?).
Eller en separat
SELECT COUNT(*) FROM cc_kund WHERE mail like " . '"' . $userMail .'%"';
(Inom parentes så är inte "select-star" så snyggt i programkod. Det är
praktiskt då man kör manuellt, men inte i produktions-kod.)
Re: mySQL-fråga
Postat: 7 juni 2022, 15:33:00
av Wihelm
Re: mySQL-fråga
Postat: 7 juni 2022, 15:37:52
av SeniorLemuren
Tja, som vanligt. Jag hittade det i ett av mina gamla sidor från förr precis när jag postat frågan.
Kod: Markera allt
<?php $query_order = "SELECT * FROM cc_kund WHERE mail like " . '"' . $userMail .'%"';
$result = $con->query($query_order);
$row = mysqli_fetch_array($result);
$antRows = mysqli_num_rows($result);
echo $antRows; ?>
Re: mySQL-fråga
Postat: 7 juni 2022, 15:56:57
av sodjan
Ja, jag misstänkte att API't hade en sådan funktion också, men har inte jobbat med MySQL...
Re: mySQL-fråga
Postat: 7 juni 2022, 22:30:39
av agehall
Hett tips: skapa ALDRIG SQL frågor genom att klippa ihop strängar sådär. Det kanske bara är ett exempel du visar nu, men om du gör det i produktion och jag använder e-mail i stil med ”;DELETE * FROM cc_kund;” så blir det tråkigt…
Re: mySQL-fråga
Postat: 7 juni 2022, 23:30:56
av sodjan
Re: mySQL-fråga
Postat: 8 juni 2022, 06:11:23
av schnilsch
Mysqli förhindrar att det utförs två queries samtidigt om man inte använder mysqli_multi_query() så just agehalls exempel borde inte funka.
Finns dock andra fulingar man kan göra så prepared statements är ändå kung

Re: mySQL-fråga
Postat: 8 juni 2022, 10:05:26
av SeniorLemuren
Ok. Kan man få ett förslag på hur man skall skriva om min select för att bli säker. Jag förstod inte riktigt de länkade exemplen.

Re: mySQL-fråga
Postat: 8 juni 2022, 10:13:47
av Wihelm
Bobby Tables är inte roligt att få besök av.
Bobby-Tables.png
Re: mySQL-fråga
Postat: 8 juni 2022, 10:22:48
av schnilsch
Re: mySQL-fråga
Postat: 8 juni 2022, 11:34:45
av SeniorLemuren
Japp jag hittade detta för en stund sedan och testar men får det inte att funka. Kanske jag skriver fel?
Kod: Markera allt
$userMail = 'Olg%';
$sql = "SELECT * FROM users WHERE id like ?";
$stmt = $con->prepare($sql);
echo $userMail; //Hit funkar det
$stmt->bind_param("s", $userMail); //Här går det fel och stannar, varken med eller utan %-tecknet
echo $userMail; // Hit kommer det inte
$stmt->execute();
$result = $stmt->get_result();
$user = $result->fetch_assoc();
echo $user;
Re: mySQL-fråga
Postat: 8 juni 2022, 12:46:17
av BJ
En annan sak med det länkade exemplet är att programmet dör
när det misslyckas. Så måste det inte vara. Man kan lika gärna
använda en eller flera variabler som håller reda på om det blir fel.
Då kan man börja och avsluta sidan hur man vill genom att titta
på variabeln eller variablerna både där och lite senare, hur det gick.
Re: mySQL-fråga
Postat: 8 juni 2022, 13:02:51
av schnilsch
Det kanske är så att prepare misslyckas och $stmt är null?
Har du någon fellogg du kan titta på?
Edit:
Prepare ska returnera false om den misslyckas.