Fórum Root.cz
		Hlavní témata => Vývoj => Téma založeno: Honzasko  19. 10. 2020, 15:38:46
		
			
			- 
				Poslední dobou zkouším dělat chat,server - PHP(webserver),klient - node.js/electron.Všechno to mám propojené přes ajax a přito jsem narazil na problém s php/mysqli.
 Problém č.1:
 PHP naprosto ignoruje POST z ajaxu či špatně fungující mysqli.
 Problém č.2:
 PHP neumí správně spočítat počet řádku v mysql db přes mysqli.
 Když v konzoli mysql zadám příkaz k přečtení všeho z tabulky tak to krásně funguje,avšak v PHP ne. Funkce fetch_assoc vrací prázdný obsah.
 
 <?php 
 if(isset($_POST['nick'],$_POST['msg']))
 {
 $conn = new mysqli("localhost","db","","chat");
 $user = $_POST['nick'];
 $msg = $_POST['msg'];
 $final_send = $user + ":" + $msg;
 $final_send = $conn->escape_string($final_send);
 $conn->query("INSERT into messages(msg)VALUES(".$final_send.");");
 $conn->close();
 }
 else
 {
 $conn = new mysqli("localhost","db","","chat");
 $for_echo = "";
 $result = $conn->query('SELECT * FROM messages;');
 if($result->num_rows > 0)
 {
 echo $result->num_rows;
 while($row = $result->fetch_assoc())
 {
 $for_echo = $for_echo + "<br>" + $row["msg"];
 }
 }
 $conn->close();
 echo $for_echo;
 }
 
 ?>
- 
				K PHP je volně dostupná dokumentace s popisy a příklady použití.
 https://www.php.net/manual/en/mysqli.real-escape-string.php (https://www.php.net/manual/en/mysqli.real-escape-string.php)
 https://www.php.net/manual/en/mysqli-result.num-rows.php (https://www.php.net/manual/en/mysqli-result.num-rows.php)
- 
				K PHP je volně dostupná dokumentace s popisy a příklady použití.
 https://www.php.net/manual/en/mysqli.real-escape-string.php (https://www.php.net/manual/en/mysqli.real-escape-string.php)
 https://www.php.net/manual/en/mysqli-result.num-rows.php (https://www.php.net/manual/en/mysqli-result.num-rows.php)
 
 to ano,aji jsem to podle toho dělal kromě toho stringu ale v druhém problému rozhodně není problém se stringem
- 
				num_rows nemusí obsahovat správnou hodnotu dokud se nenačtou všechna data a řetězce se spojují operátorem . (tečka).
			
- 
				Použijte prepared statements, mysqli to umí (https://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php), PDO taky (https://www.php.net/manual/en/pdo.prepared-statements.php). Počet řádků - záleží, na co to potřebujete, ale asi bych použil SELECT count(*) AS count FROM table;a vytáhnul si hodnotu count z výsledku.
- 
				K čemu je dobrá metoda escape_string()? Je to něco podobného jako metoda quote() v PDO?
 
 Když budeš používat prepared statements, tak na tyhle nesmysly zapomeneš.
- 
				num_rows nemusí obsahovat správnou hodnotu dokud se nenačtou všechna data a řetězce se spojují operátorem . (tečka).
 
 jenže ta hodnota je větší
- 
				K čemu je dobrá metoda escape_string()? Je to něco podobného jako metoda quote() v PDO?
 
 Když budeš používat prepared statements, tak na tyhle nesmysly zapomeneš.
 
 PDO ani prepared statements jsem nikdy nepoužívál
- 
				K čemu je dobrá metoda escape_string()? Je to něco podobného jako metoda quote() v PDO?
 
 Když budeš používat prepared statements, tak na tyhle nesmysly zapomeneš.
 
 PDO ani prepared statements jsem nikdy nepoužívál
 
 
 Prepared statements vypadají v MySQLi poněkud obskurně, ale zvyknout se na to dá. V PDO jsou vyřešeny mnohem lépe.
 
 Aspoň vyměň ty pluska za tečky tam, kde nechceš sčítat čísla, ale spojovat stringy.
- 
				K čemu je dobrá metoda escape_string()? Je to něco podobného jako metoda quote() v PDO?
 
 Když budeš používat prepared statements, tak na tyhle nesmysly zapomeneš.
 
 PDO ani prepared statements jsem nikdy nepoužívál
 
 
 Prepared statements vypadají v MySQLi poněkud obskurně, ale zvyknout se na to dá. V PDO jsou vyřešeny mnohem lépe.
 
 Aspoň vyměň ty pluska za tečky tam, kde nechceš sčítat čísla, ale spojovat stringy.
 
 To jsem udělal a vyřešilo to oba 2 problémy