mySQL SELECT fråga

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
SeniorLemuren
Inlägg: 6703
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

mySQL SELECT fråga

Inlägg 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.
Användarvisningsbild
Klas-Kenny
Inlägg: 9314
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: mySQL SELECT fråga

Inlägg 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 %
Senast redigerad av Klas-Kenny 20 juni 2019, 13:26:37, redigerad totalt 1 gång.
Användarvisningsbild
mrfrenzy
Co Admin
Inlägg: 11505
Blev medlem: 16 april 2006, 17:04:10

Re: mySQL SELECT fråga

Inlägg 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
JanErik
Inlägg: 2777
Blev medlem: 11 februari 2008, 17:15:58
Ort: Vasa, Finland

Re: mySQL SELECT fråga

Inlägg av JanErik »

Kunde detta fungera?

Kod: Markera allt

$searchStr="%svets%"
SeniorLemuren
Inlägg: 6703
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: mySQL SELECT fråga

Inlägg av SeniorLemuren »

Besvarar mig själv. Missad %sökord% :doh:
johano
Inlägg: 1942
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: mySQL SELECT fråga

Inlägg av johano »

Prova sen med att söka på " '; DROP TABLE my_info_table;-- " :D
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 39194
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: mySQL SELECT fråga

Inlägg 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".
Användarvisningsbild
mankan
EF Sponsor
Inlägg: 606
Blev medlem: 18 juli 2015, 11:23:22
Ort: Linköping

Re: mySQL SELECT fråga

Inlägg av mankan »

Angående SQL injection så tänker jag alltid på https://xkcd.com/327/
johano
Inlägg: 1942
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: mySQL SELECT fråga

Inlägg av johano »

Ja den är bra :-)

"little Bobby tables" :-)
SeniorLemuren
Inlägg: 6703
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: mySQL SELECT fråga

Inlägg 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.
Användarvisningsbild
AndLi
Inlägg: 10550
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: mySQL SELECT fråga

Inlägg 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?
Användarvisningsbild
Housepainter
EF Sponsor
Inlägg: 1317
Blev medlem: 19 juli 2006, 18:50:38
Ort: Borås

Re: mySQL SELECT fråga

Inlägg av Housepainter »

:rofl
johano skrev:Prova sen med att söka på " '; DROP TABLE my_info_table;-- " :D
Användarvisningsbild
Mickecarlsson
Inlägg: 1184
Blev medlem: 15 april 2017, 18:06:15
Ort: Malmö
Kontakt:

Re: mySQL SELECT fråga

Inlägg 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.
Skriv svar