PDO - zjistit počet řádku v tabulce – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

PDO - zjistit počet řádku v tabulce – PHP – Fórum – Programujte.comPDO - zjistit počet řádku v tabulce – PHP – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
danhill0
Duch
8. 3. 2015   #1
-
0
-

Ahoj, lámu si hlavu jak zjistím počet řádků v tabulce SQL kvůli pagingu v kombinaci s vyhledávání v tabulce.

První část, pokud není vyplněno vyhledávací pole mi krásně vyhodí počet řádků.

Ale v else dotazu,
 jakmile zkusím něco vyhledat, tak to vyhodí chybu místo čísla.

$search_field = $_GET['search'];

//zjistím počet řádků (uživatelů) které budu stránkovat	
if (empty($_GET["search"])) 
{
$total = $pdo->query('
	SELECT count(user_id) 
	FROM user
	')->fetchColumn();
print $total;
}

//počet řádků pokud je něco ve vyhledávacím poli
else 
{	
$total = $pdo->query('
	SELECT count(user_id)
	FROM user
	WHERE user_id LIKE :searching OR user_name LIKE :searching OR user_mail LIKE :searching
	');
$total->bindParam(':searching', $search_field, PDO::PARAM_INT);
$total->fetchColumn();

print $total;
    
//pokud je nalezeno více než 1 zobraz kolik, pokud je nalezeno 0 = nic nenalezeno
if ($total<1) {
              $zprava_R = 'Nebylo nic nalezeno !';
              }
         else {
              $zprava_G = 'Nalezeno: '.$total;
              }
}
Nahlásit jako SPAM
IP: 62.24.81.–
Reklama
Reklama
Kit+11
Guru
8. 3. 2015   #2
-
+1
-
Zajímavé

#1 danhill
 Máš tam 3 parametry, každý se musí jmenovat jinak.

$select = $pdo->prepare("
	SELECT count(user_id) FROM user
	WHERE user_id LIKE :searching1 OR
		user_name LIKE :searching2 OR
		user_mail LIKE :searching3
	");
$select->bindParam(':searching1', $search_field, PDO::PARAM_INT);
$select->bindParam(':searching2', $search_field, PDO::PARAM_INT);
$select->bindParam(':searching3', $search_field, PDO::PARAM_INT);
$select->execute();
$total = $select->fetchColumn();

BTW: K čemu tam vlastně máš "PDO::PARAM_INT"?

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
danhill0
Duch
8. 3. 2015   #3
-
0
-

Ani nevím k čemu to tam je :) ... Zkoušel různě hledat na netu a našel jsem pár příkladů a bylo to tam ... 

Ale děkuji, tohle vypadá, že nějak funguje. 

Ještě musím doladit tu proměnnou $search_field

Asi tam musí být něco jako '%'.$_GET['search'].'%' aby to chodilo dobře.

Ještě mi to vyhodí chybu, když vyhledávám něco,co v tabulce vůbec není.

Nahlásit jako SPAM
IP: 62.24.81.–
Kit+11
Guru
8. 3. 2015   #4
-
+1
-
Zajímavé

#3 danhill
Místo těch 3 bindParam() mám raději 

$word = "%$_GET[search]%"; 
$select = $pdo->prepare("SELECT count(user_id) FROM user
	WHERE user_id=? OR user_name LIKE ? OR user_mail LIKE ?
	");
$select->execute(array($_GET[search], $word, $word));
Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
danhill0
Duch
8. 3. 2015   #5
-
0
-

Ano, to se mi taky líbí více.

Chybu mi pak ale hodí při FALSE hledání zobrazení výsledku:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-2' at line 6' in /admin/user_ta­ble.php:122 Stack trace: #0 /admin/user_ta­ble.php(122): PDOStatement->execute() #1 {main} thrown in /admin/user_ta­ble.php on line 122

Což je tento kod: 

$stmt = $pdo->prepare('
                       SELECT `user_id`,`user_name`,`user_mail`,`user_level`,`date`,`last_login`,`count_login`
                       FROM user
                       WHERE user_id LIKE :searching11 OR user_name LIKE :searching22 OR user_mail LIKE :searching33
                       ORDER BY user_id DESC
                       LIMIT :limit
                       OFFSET :offset
                       ');
       $stmt->bindParam(':searching11', $search, PDO::PARAM_INT);
       $stmt->bindParam(':searching22', $search, PDO::PARAM_INT);
       $stmt->bindParam(':searching33', $search, PDO::PARAM_INT);
       $stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
    $stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
    $stmt->execute();

Kde řádek 122 je : $stmt->execute();

Nahlásit jako SPAM
IP: 62.24.81.–
Kit+11
Guru
8. 3. 2015   #6
-
0
-

#5 danhill
Píše to přece "Syntax error or access violation: 1064", takže v tom SQL dotazu máš někde chybu. Měl by sis odchytit výjimku z metody prepare().

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 29 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý