Sida 1 av 1

mySQL SELECT fråga

Postat: 20 juni 2019, 12:37:03
av SeniorLemuren
Hur sjutton skriver man om man vill söka en post som innehåller en lång text med ett sökord.
Säg att jag vill öppna posten som innehåller ordet svets i strängen "blabla svets blabla bla mer svets."


Försöker jag med
$searchStr="svets"

SELECT * FROM my_info_table WHERE info LIKE " . '"' . $searchStr .'"';

Så går det inte. Men söker jag på hela strängen:

$searchStr="blabla svets blabla bla mer svets."

SELECT * FROM my_info_table WHERE info LIKE " . '"' . $searchStr .'"';

Så funkar det.

Re: mySQL SELECT fråga

Postat: 20 juni 2019, 12:49:19
av Klas-Kenny

Kod: Markera allt

SELECT * FROM my_info_table WHERE info LIKE " . '"%' . $searchStr .'%"'; 
Borde göra jobbet.

Edit: oj, hade skrivit $ istället för %

Re: mySQL SELECT fråga

Postat: 20 juni 2019, 12:50:37
av mrfrenzy
För att söka på delar av strängar använder man FULLTEXT index. Dom tar lång tid att skapa och kräver mycket lagringsutrymme men sen går det blixtsnabbt att söka.

https://dev.mysql.com/doc/refman/8.0/en ... dexes.html

Re: mySQL SELECT fråga

Postat: 20 juni 2019, 12:55:43
av JanErik
Kunde detta fungera?

Kod: Markera allt

$searchStr="%svets%"

Re: mySQL SELECT fråga

Postat: 20 juni 2019, 13:03:50
av SeniorLemuren
Besvarar mig själv. Missad %sökord% :doh:

Re: mySQL SELECT fråga

Postat: 20 juni 2019, 14:24:42
av johano
Prova sen med att söka på " '; DROP TABLE my_info_table;-- " :D

Re: mySQL SELECT fråga

Postat: 20 juni 2019, 14:59:20
av sodjan
Och innan du gör det, det där är ett bra exempel på "SQL injection".
Ett stort problem om man inte kan använda "SQL parameters" utan
måste hantera dynamiska SQL satser med stränghantering. Inte bra
i de fall att t.ex "svets" kommer från en hemsida där användaren
kan skriva vad som helst i ett formulär, t.ex ett DROP kommando...

Ditt exempel skulle kunna set ut ungefär så här:

Kod: Markera allt

$searchStr="%svets%"

/* create a prepared statement */

if ($stmt = $mysqli->prepare("SELECT * FROM my_info_table WHERE info LIKE ?")) {

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

    /* execute query */
    $stmt->execute();
...
...
}
Ungefär, otestad o.s.v. Här går det *inte* att använda johanos lilla "trick"...
Se mer på t.ex. https://www.php.net/manual/en/mysqli.prepare.php
Eller googla "php sql prepare statement".

Re: mySQL SELECT fråga

Postat: 20 juni 2019, 17:44:33
av mankan
Angående SQL injection så tänker jag alltid på https://xkcd.com/327/

Re: mySQL SELECT fråga

Postat: 20 juni 2019, 18:58:42
av johano
Ja den är bra :-)

"little Bobby tables" :-)

Re: mySQL SELECT fråga

Postat: 20 juni 2019, 23:58:58
av SeniorLemuren
Det jag håller på med nu är enbart en prototyp-app. Jag har inte så bra kunskaper om detta med "SQL injection" så det får bli ett senare problem när jag fått appen att fungera som jag tänkt. Avsikten är att köra den mot mySQL. Apache (XAMPP) lokalt i datorn. För tillfället kör jag den mot en internetserver bara för att kunna komma åt den när jag inte sitter hemma.

Re: mySQL SELECT fråga

Postat: 22 juni 2019, 12:04:56
av AndLi
Filtrera bort ; och andra specialtecken ur söksträngen så är du lite mer skyddad. Och kanske en maxgräns på 10 tecken?

Re: mySQL SELECT fråga

Postat: 30 september 2019, 23:04:02
av Housepainter
:rofl
johano skrev:Prova sen med att söka på " '; DROP TABLE my_info_table;-- " :D

Re: mySQL SELECT fråga

Postat: 1 oktober 2019, 06:26:55
av Mickecarlsson
Se tills så att användaren som accessar databasen bara har de behörigheter som krävs.
GRANT SELECT, INSERT, DELETE ON database.* TO 'user'@'localhost';

Ska det bara sökas i databasen:
GRANT SELECT ON database.* TO 'user'@'localhost';

Som tillägg till de andra säkerhetsåtgärderna.