ugrás a tartalomhoz

mysql Select darabolás

GreenEar · 2014. Jan. 21. (K), 09.18
Sziasztok ismét itt vagyok.

Egy kérdésem lenne, van egy dolog ami régen foglalkoztat, de csak most jutottam el odáig hogy szükségem is legyen rá.

Ha adott egy alap select lekérés mysql-ből, azt hogy lehet részletekben lekérni?


<?
require_once('kapcsford.php');
 
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

$query = "SELECT * FROM tablanev WHERE xy='" .$_GET['xy']. "', yx='" .$_GET['yx']. "', xyz=" .$_GET['xyz']. "";
$data = mysqli_query($dbc, $query);

?>



A lényeg az lenne hogy feltételek alapján csak akkor csatoljon a select-hez egy egy feltételt, ha arra valóban szükség van.

Van egy gondolatom de szerintem messze vagyok a lényegtől:


<?
require_once('kapcsford.php');
 
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

$query = "SELECT * FROM tablanev WHERE";

if ($_GET['xy']) {

$query = "xy='" .$_GET['xy']. "',";

}

if ($_GET['yx']) {

$query = "yx='" .$_GET['yx']. "',";

}

if ($_GET['xyz']) {

$query = "xyz='" .$_GET['xyz']. "',";

}

$query = "ORDER BY date ASC";


echo '...................';


?>


Ha tudtok nekem infót adni azt megköszönném. Bár eddig már sok dolgot sikerült megoldani a segítségetekkel. Lehet mindegy lenne ha tandíjat a weblabornak fizetném, én is jobban járnék meg ti is :D
 
1

implode

szabo.b.gabor · 2014. Jan. 21. (K), 09.55
Egyrészt hagy említsem meg, hogy escape-elés, avagy prepared statement.

feltételeket rakd be egy tömbbe, majd implode-dal rakd őket össze. de ilyen esetekben előbb utóbb eljutsz egy olyan bonyolultsági szintre, hogy nem fogod tudni kezelni szöveges műveletekkel, szükséged lesz egy eszközre.
require_once('kapcsford.php');  
   
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);  

$where = array();

if ($_GET['xy']) {  
  
$where[] = "xy='" .mysqli_real_escape_string($dbc,$_GET['xy']). "'";  
  
}  
  
if ($_GET['yx']) {  
  
$where[] = "yx='" .mysqli_real_escape_string($dbc,$_GET['yx']). "'";  
  
}  
  
if ($_GET['xyz']) {  
  
$where[] = "xyz='" .mysqli_real_escape_string($dbc,$_GET['xyz']). "'";  
  
}  

$query = "SELECT * FROM tablanev ";   
if(!empty($where)){
$query .= 'WHERE '.implode(' AND ', $where).' ';
}
$query .= "ORDER BY date ASC";  
  
  
echo '...................';  
amúgy alapvetően azért nem ment a lekérdezésed, mert a $query-hez nem hozzáfűzted a dolgokat, hanem mindig felülírtad, valamint a where feltételeket vesszővel adtad hozzá, nem AND-del
2

...

GreenEar · 2014. Jan. 21. (K), 10.55
félisten vagy :)

megy a dolog az implode-al. Egyenlőre teljesen jó ez a megoldás mert összesen 3 feltétel van, ennél még nem annyira bonyolult a helyzet. escape-t használok csak ha ide írok be példát akkor nem szoktam feltüntetni.

Köszi szépen a segítséget!
3

prepared statement

Poetro · 2014. Jan. 21. (K), 11.50
Ha már úgyis MySQLi-t használsz, miért nem használsz prepared statement-et? Megkönnyíti az életedet, és nem tesz ki SQL injectionnek, valamint nem kell kézzel escapelned.
5

+1, prepared statementet

bamegakapa · 2014. Jan. 27. (H), 13.26
+1, prepared statementet mindenkinek!
4

Válasz

mate.paszi · 2014. Jan. 26. (V), 22.16
Szia, én erre tudok egy jó példát. Van egy úgynevezett mysql_fetch_assoc() függvény, ami ad egy asszociatív tömböt visszatérési értékül, és azokat egy ciklussal kell kiírni. Ezt amúgy üzenőfalaknál, közösségi oldalaknál szoktuk használni. Ha üzenőfalra lenne szükséged, írj az email címemre. Mutatom is (ha nem működne, akkor írjátok meg nekem, hogy mit ír ki a php error, és kijavítom):

-- Először hozzuk létre az adatbázist, és a táblát:
create database kilistazas;
use kilistazas;
create table kilistazas_table
(
id int not null auto_increment,
primary key(id),
name varchar(255) not null,
message text not null
);

$host = "localhost";
$host_username = "root";
$host_password = "";
$database = "kilistazas";
mysql_connect($host, $host_username, $host_password);
mysql_select_db($database);
$kilistazas_sql = mysql_query("select * from kilistazas_table");
while ($kilistazas = mysql_fetch_assoc($kilistazas_sql)) {
echo "
ID: ".$kilistazas["id"]."<br />
NAME: ".$kilistazas["name"]."<br />
MESSAGE: ".$kilistazas["message"]."<br />
";
}
Remélem, tudtam segíteni...
6

A kérdés nem ez volt, kérlek

bamegakapa · 2014. Jan. 27. (H), 13.34
A kérdés nem ez volt, kérlek olvasd el újra.

Ettől függetlenül kérlek a kódodban használj behúzásokat, mert nehezen olvasható így és rossz példát mutat.

A mysql_ függvényeket pedig kérlek ne javasold senkinek használatra, mert hamarosan kikerülnek a PHP nyelvből, helyettük a mysqli vagy a PDO használata javasolt. Főleg, hogy a kérdező is nagyon helyesen mysqli-t használ.