Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Proste wstawianie działa z phpmyadmin, ale nie z php

Dla pewności:kiedy próbujesz wykonać te 4 zapytania z PHP, wywołujesz mysql_query cztery razy?

Na przykład :

mysql_query("INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,1,1)");
mysql_query("INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,2,1)");
mysql_query("INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,3,1)");
mysql_query("INSERT INTO um_group_rights (`um_group_id`,`cms_usecase_id`,`um_right_id`) VALUES (2,4,1)");


Mam na myśli to, że:nie można wysłać kilku odrębnych zapytań naraz, tylko jedno wywołanie mysql_query (cytat, podkreślenie moje) :

Musisz "oddzielić" swoje zapytania - co prawdopodobnie jest czymś, co phpMyAdmin robi bez informowania cię.

I, jak zauważył @Alexandre w komentarzach :


Jeśli używasz mysqli_* funkcje (a nie mysql_* ), aby uzyskać dostęp do bazy danych, możesz spróbować użyć mysqli_multi_query .

Niestety istnieje taka funkcja dla mysql_* .

(BTW:mysql_* API jest stare - lepiej, zwłaszcza dla nowego projektu, użyć mysqli_* )


Edytuj po komentarzu:

Jeśli chodzi o wydajność, tak, wykonanie pojedynczego wywołania do bazy danych, zamiast czterech kolejnych PHP <-> MySQL połączeń, mogłoby być lepiej.

W takim przypadku możesz spróbować użyć składni insert, która pozwala wstawić kilka wierszy naraz; zobacz 12.2.5. WSTAW składnię w podręczniku MySQL (cytuję) :



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SELECT nie działa przy użyciu !=w klauzuli WHERE (przy użyciu GROUP BY i HAVING COUNT)

  2. mysql_fetch_array() oczekuje, że parametr 1 będzie zasobem, podany ciąg

  3. zduplikowane rekordy w SQL JOIN

  4. Mysql Dołącz do dwóch stołów na klawiszach

  5. Zaktualizuj listę rzeczy bez uderzania w każdy wpis