Portrety Uliczne Nieznajomych - zobacz wyjątkową galerię portretów z warszawskich ulic
ZALOGUJ SIĘ
login:
hasło:
przypomnij hasło
załóż konto użytkownika
(i zobacz kilka porad gratis)
   
WYSZUKIWARKA I DZIAŁY
całe porady  tytuły
zaznacz działy do przeszukania
(brak wyboru = wszystkie działy)
PHP
MySQL >
PostgreSQL
SQLite
Perl
Java
XML
XSLT
XPath
WML
SVG
RegExp
Wyszukiwarki
Ochrona
VBScript
Google Plus
XHTML/CSS
JavaScript
Grafika
Flash
Photoshop
Windows
Linux
Bash
Apache
Procmail
E-biznes
Explorer
Opera
Firefox
Inne porady
   
KURSY, DOKUMENTACJE
Własne:
XHTML/CSS
JavaScript
ActionScript
WML, RSS, SSI
Pozostałe:
PHP
MySQL
Java API
więcej...
   
użytkowników online: 46
W CZYM MOGĘ POMÓC?


   
OPINIE UŻYTKOWNIKÓW
Gratulacje i dzięki! Trafiłem tu przypadkiem poszukując informacji na temat php+mysql. Wiele polskich stron powiela identyczne przykłady, klonuje te same kursy i lekcje... ten serwis okazał sie inny. Zasada "problem - rozwiazanie - wyjaśnienie" zdaje egzamin - zapewnia jasną, jednoznaczną i pewną pomoc w konkretnym przypadku. Porady są warte swojej ceny, przede wszystkim ze względu na przyjazną (także dla początkujących) formę i treść oraz bogate i stale powiększane zasoby. Polecam i pozdrawiam!

Kamil Dmowski
Polski Czerwony Krzyż

   
GALERIA FOTOGRAFII
   
PODRĘCZNIK PHP 5.x, 4.x, 3.x - częściowo spolszczony / źródło: www.php.net

[Spis] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [X] [W] [Z]

LXXIX. MySQL

Funkcje te umożliwiają dostęp do serwerów baz danych MySQL. Więcej informacji o MySQL można znaleźć na stronie http://www.mysql.com/.

Dokumentacja do MySQL znajduje się pod adresem http://dev.mysql.com/doc/.

Wymagania

Aby funkcje były dostępne, należy skompilować PHP z obsługą MySQL.

Installation

Podając opcję konfiguracyjną --with-mysql umożliwiasz PHP dostęp do baz MySQL. Jeśli użyjesz jej bez podania ścieżki do MySQL, PHP wykorzysta własne biblioteki klienta. W PHP4 obsługa MySQL jest zawsze włączona, więc jeśli nie podasz tej opcji, PHP również użyje wbudowanych bibliotek. Użytkownicy, którzy uruchamiają inne aplikacje korzystające z MySQL (na przykład równocześnie PHP3 i PHP4 jako moduły apache, lub moduł auth-mysql) powinni zawsze podawać ścieżkę do MySQL: --with-mysql=/sciezka/do/mysql. To wymusi na PHP użycie bibliotek zainstalowanych przez MySQL, co pozwoli uniknąć konfliktów.

Ostrzeżenie

Jeśli to rozszerzenie używane jest razem z rozszerzeniem recode, mogą występować awarie i problemy ze startem PHP. Więcej informacji znajduje się w rozdziale dotyczącym rozszerzenia recode.

Konfiguracja

Zachowanie funkcji MySQL zależy od ustawień w pliku konfiguracyjnym php.ini.

Tabela 1. Opcje konfiguracyjne MySQL

NazwaDomyślnieZmiana
mysql.allow_persistent"On"PHP_INI_SYSTEM
mysql.max_persistent"-1"PHP_INI_SYSTEM
mysql.max_links"-1"PHP_INI_SYSTEM
mysql.default_portNULLPHP_INI_ALL
mysql.default_socketNULLPHP_INI_ALL
mysql.default_hostNULLPHP_INI_ALL
mysql.default_userNULLPHP_INI_ALL
mysql.default_passwordNULLPHP_INI_ALL
Aby uzyskać więcej informacji na temat stałych PHP_INI_* zobacz ini_set().

Oto krótki opis poszczególnych opcji konfiguracyjnych:

mysql.allow_persistent boolean

Czy pozwalać na stałe połączenia z MySQL.

mysql.max_persistent integer

Maksymalna liczba stałych połączeń MySQL na każdy proces.

mysql.max_links integer

Maksymalna liczba połączeń MySQL na proces, włączając w to połączenia stałe.

mysql.default_port string

Domyślny numer portu TCP, który będzie użyty przy łączeniu się z serwerm baz danych, jeśli nie zostanie podany żaden inny. Jeśli nie będzie podany port domyślny, będzie on pobrany ze zmiennej środowiskowej MYSQL_TCP_PORT, wpisu mysql-tcp w pliku /etc/services lub podanej przy kompilacji opcji MYSQL_PORT, w tym właśnie porządku. Pod Win32 użyta będzie tylko stała MYSQL_PORT.

mysql.default_socket string

Domyślna nazwa gniazda, które będzie użyte do łączenia się z lokalnym serwerem baz danych, jeśli nie zostanie podana żadna inna nazwa.

mysql.default_host string

Domyślny serwer, który będzie używany przy łączeniu się z bazą danych, jeśli nie zostanie podany żaden inny. Nie dotyczy trybu bezpiecznego.

mysql.default_user string

Domyślna nazwa użytkownika, która będzie używana przy łączeniu się z Nie dotyczy trybu bezpiecznego.

mysql.default_password string

Domyślne hasło, które będzie użyte przy łączeniu się z serwerem baz danych, jeśli nie zostanie podane żadne inne. Nie dotyczy trybu bezpiecznego.

Rodzaje zasobów

Moduł MySQL wykorzystuje dwa rodzaje zasobów. Pierwszym jest identyfikator połączenia z bazą danych, drugim zaś zasób wyniku, przechowujący rezultat zapytania.

Predefiniowane stałe

Funkcja mysql_fetch_array() używa stałych dla różnych typów tablic wynikowych. Zdefiniowane są następujące stałe:

Tabela 2. Stałe pobierania MySQL

stałaznaczenie
MYSQL_ASSOC Kolumny są zwracane jako tablica, której indeks stanowią nazwy pól.
MYSQL_BOTH Kolumny są zwracane jako tablica, indeksowana zarówno nazwami pól, jak i numerycznie.
MYSQL_NUM Kolumny są zwracane jako tablica indeksowana numerycznie. Indeks zaczyna się od 0 i wskazuje na pierwsze pole w wyniku.
MYSQL_STORE_RESULT Wynik operacji MySQL jest buforowany.
MYSQL_USE_RESULT Wynik operacji MySQL nie jest buforowany.

Przykłady

Ten prosty przykład demonstruje jak połączyć się, wykonać zapytanie, wyświetlić wyniki i rozłączyć się z bazą MySQL.

Przykład 1. Wykorzystanie funkcji MySQL

<?php
/* Łączenie i wybranie bazy */
$link = mysql_connect("localhost", "uzytkownik", "haslo")
   or die (
"Nie można się połączyć");
print (
"Połączenie nawiązane");
mysql_select_db ("baza") or die ("Nie mozna wybrać bazy danych");
  
/* Wysyłanie zapytania SQL */
$query = "SELECT * FROM tabela";
$result = mysql_query ($query) or die ("Zapytanie zakończone niepowodzeniem");

/* Wyświetlenie wyników w HTML */
print "<table>\n";
while (
$line = mysql_fetch_array($result, MYSQL_ASSOC)) {
   print
"\t<tr>\n";
   foreach (
$line as $col_value) {
       print
"\t\t<td>$col_value</td>\n";
   }
   print
"\t</tr>\n";
}
print
"</table>\n";

/* Zwalnianie pamięci */
mysql_free_result($result);

/* Rozłączanie */
mysql_close($link);
?>

Spis treści
mysql_affected_rows -- Zwraca ilość wierszy przetworzonych w poprzedniej operacji MySQL
mysql_change_user --  Zmienia użytkownika zalogowanego w aktywnym połączeniu
mysql_client_encoding -- Returns the name of the character set
mysql_close -- Zamyka połączenie z serwerem MySQL
mysql_connect -- Otwiera połączenie z serwerem MySQL
mysql_create_db -- Tworzy bazę MySQL
mysql_data_seek -- Przesuwa wewnętrzny wskaźnik wyniku
mysql_db_name -- Pobiera dane wynikowe
mysql_db_query -- Wysyła zapytanie do bazy MySQL
mysql_drop_db -- Usuwa bazę MySQL
mysql_errno --  Zwraca numer komunikatu błędu z ostatniej operacji MySQL
mysql_error --  Zwraca tekst komunikatu błędu z ostatniej operacji MySQL
mysql_escape_string --  Dodaje znaki unikowe na użytek mysql_query
mysql_fetch_array --  Zapisuje wiersz wyniku w tablicy asocjacyjnej, numerycznej lub w obu
mysql_fetch_assoc --  Zapisuje wiersz wyniku w tablicy asocjacyjnej
mysql_fetch_field --  Pobiera z wyniku informacje o kolumnie i zwraca jako obiekt
mysql_fetch_lengths --  Pobiera długość każdego pola w wierszu wyniku
mysql_fetch_object -- Zapisuje wiersz wyniku jako obiekt
mysql_fetch_row -- Zapisuje wiersz wyniku w tablicy wyliczeniowej
mysql_field_flags --  Pobiera flagi dla danego pola w wyniku
mysql_field_len -- Zwraca długość danego pola
mysql_field_name -- Podaje nazwę danego pola w wyniku
mysql_field_seek -- Przesuwa wskaźnik wyniku do wybranego pola
mysql_field_table --  Pobiera nazwę tabeli w której znajduje się dane pole
mysql_field_type --  Pobiera typ podanego pola
mysql_free_result -- Zwalnia pamięć zajmowaną przez wynik
mysql_get_client_info -- Pobiera informacje o kliencie MySQL
mysql_get_host_info -- Pobiera informacje o hoście MySQL
mysql_get_proto_info -- Pobiera informacje o protokole MySQL
mysql_get_server_info -- Pobiera informacje o serwerze MySQL
mysql_info --  Pobiera informacje o ostatnim zapytaniu
mysql_insert_id --  Podaje numer ID wygenerowany podczas ostatniej operacji INSERT
mysql_list_dbs --  Pobiera nazwy baz dostępnych na serwerze MySQL
mysql_list_fields -- Pobiera informacje o polach tabeli MySQL
mysql_list_processes -- Zwraca listę procesów MySQL
mysql_list_tables -- Pobiera listę tabel z bazy MySQL
mysql_num_fields -- Zwraca liczbę pól w wyniku
mysql_num_rows -- Zwraca liczbę wierszy w wyniku
mysql_pconnect --  Otwiera stałe połączenie z serwerem MySQL
mysql_ping -- Sprawdza połączenie z serwerem, lub nawiązuje połączenie, jeśli go nie było
mysql_query -- Wysyła zapytanie do serwera MySQL
mysql_real_escape_string --  Dodaje znaki unikowe dla potrzeb poleceń SQL, biorąc po uwagę zestaw znaków używany w połączeniu.
mysql_result -- Zwraca dane wynikowe
mysql_select_db -- Wybiera bazę MySQL
mysql_stat -- Pobiera aktualny stan systemu
mysql_tablename -- Zwraca nazwę tabeli
mysql_thread_id -- Zwraca id bieżącego wątku
mysql_unbuffered_query --  Wysyła zapytanie do serwera MySQL nie pobierając i buforując wyniku



User Contributed Notes

27-Dec-2005 01:30

For FC3 the command to install is $yum install php-mysql, not php_mysql (use a dash, not an underscore)


jeremy hepler
20-Dec-2005 09:12

For those of you on an OS that has older mysql libs and want to properly authenticate to the modern mysql versions, without the OLD_PASSWORD hack; compile php with where you have installed the latest mysql binary package:

./configure --with-mysql=/usr/local/mysql

if you have mysql installed on seperate server, just drop it into the target directory on what ever machine you are compiling it on.

Be sure to "make clean" before building or it may look in the previous place.

Use the output of mysql_get_client_info(); to test before and after.


Joe Greklek
15-Dec-2005 10:15

I've seen alot of newbies getting frustrated over the extenstions not being installed initially, so heres a quick tut for Windows.

It's ok to use the php5 installer. Just be sure to also grab the .zip or "manual" version of php5.

Install it like any other app. It's pretty straight forward. Don't forget to set the securities mentioned in the last message box at the end of the install. Next, If you installed php to c:\php then you will need to add this to your PATH environment variable. This is a very important step.

Now open up the .zip manual version of php5 and extract the ext folder, and "libmysql.dll" to "c:\php\".

You *MUST* set your security permissions on libmysql.dll and the ext folder to READ/READ&EXECUTE for IUSR_"MACHINE_NAME". like my machine is called master<acct = IUSR_MASTER>. If you don't do this you will recieve an ******.dll - Access Denied. type message.

Next edit your php.ini file usually located in c:\windows\.
Find the line for    extension_dir    variable and make it say
extension_dir = "c:\php\ext\"

Then scroll down a little bit and find the lines that say
;extension=php_mbstring.dll
;extension=php_bz2.dll
;extension=php_curl.dll
;extension=php_dba.dll
;extension=php_dbase.dll
;extension=php_exif.dll
;extension=php_fdf.dll
;extension=php_filepro.dll
;extension=php_gd2.dll
;extension=php_gettext.dll
;extension=php_ifx.dll

just remove the semicolin for each extension you would like loaded. Such as
extention=php_mysql.dll
and so on.

Now just reboot and all should be well. Query away. you basically only need to reboot to update the PATH environment variable. Hope this helps at least 1 person.:)


phil at pelanne dot com
03-Nov-2005 04:46

If you are experiencing extremely slow connections to MySQL from PHP from a Windows 2003 Server it may well not be PHP or IIS - try loading mysql in in 'skip-name-resolve'-Mode. 

It may mean the difference between a 10 second load time and a split second load time.


13-Oct-2005 06:44

i would like to add my 2 cents worth my reconfirming what others have stated above, after adding the paths in win 2003 server REBOOT. I fiddled around for ages trying to connect and finally after reading a comment above, i did and it worked.


Http://iranprofessional.com
24-Sep-2005 12:14

If you have problem about php_mysql.dll and php can not fin it this is your solution:
you must clear the " "  . for example
in  php.ini
extension_dir = "c:\php\ext"    ( This is false )
extension_dir = c:\php\ext        (This is true )


Jonathon Hibbard
21-Sep-2005 07:47

This is a small function I wrote to handle queries on a table.
It can query a table, order and sort, and supports inner joins.

This function also returns the result as a single row or all rows.

Enjoy :

<?php
 
/**
   * Selects Fields from a database/table. 
   * Also supports INNER JOINS, GROUP BY, ORDER BY.
   *
   * @Author : Jonathon Hibbard
   *
   * @param string $db_name        //Name of Database
   * @param string $table          //Name of Table
   * @param array $fields          //Field Names we want to select
   * @param array $inner            //Fields to be INNER JOINED
   * @param array $where            //WHERE fields.
   * @param string $group_by        //Field to group by.
   * @param string $order_by        //Field to order by
   * @param string $asc            //Asc or Desc order
   * @param string $return_array    //Defines $rst as an array or single row
   * @return $rst                  //Returns the result
   *
   * @example : (1) getFields('mytool','master',
   *                          'array('master.master_id','master.fname_id'));
   *            (2) getFields('mytool','master',
   *                          'array('master.master_id','master.fname_id',
   *                          'fname.fname'), array(0=>array('mytool',
   *                          'fname','master','fname_id',)),
   *                          'master.default_value <> "", false);
   *            (3) getFields('mytool','master','master.master_id',NULL,
   *                          'master.fname_id = "3",NULL,NULL,NULL,false);
   */
 
function getFields($db_name=NULL,$table=NULL,$fields=NULL,$inner=NULL,
                    
$where=NULL,$group_by=NULL,$order_by=NULL,$asc=NULL,
                    
$return_array=true) {
  
$C_NAME = __CLASS__."::".__FUNCTION__;
  
$sql = "SELECT ";
  
is_array($fields) ? $sql .= implode(',',$fields) : $sql .= $fields;
  
$sql .= " FROM ".$db_name.".".$table;
   if(!empty(
$inner)) {
    
$total_inners = count($inner);
     for(
$i=0; $i<$total_inners; $i++)
      
$sql .= " INNER JOIN ".$inner[$i][0].".".$inner[$i][1]."
                 ON "
.$inner[$i][1].".".$inner[$i][2]." =
                     "
.$inner[$i][3].".".$inner[$i][2];
   }
   if(!empty(
$where)) {
    
is_array($where) ? $sql .= " WHERE ".implode(' AND ',$where)
                       : die(
"Fatal Error : Variable must be an array. 
                         Variable type is : "
.gettype($where));
   }
   !empty(
$group_by) ? $sql .= " GROUP BY ".$group_by : '';
   !empty(
$order_by) ? $sql .= " ORDER BY ".$order_by : '';
   !empty(
$asc)      ? $sql .= " ".$asc : '';
  
$sql .= " # Query resides in ".__FILE__."->".$C_NAME."
               on line "
.__LINE__;
   if(
$return_array === true) {
    
$rst = mysql_query($sql)
             or die(
"An Error Has Occurred!
                 \n MySQL Error Reports : "
.mysql_error()."
                 \n The Error Occured in "
.__FILE__." -> ".$C_NAME);
    
$i=0;
     while(
$row = mysql_fetch_assoc($rst)) {
      
$rowRst[] = $row[$fields[$i]];
      
$i++;
     }
   } else {
    
$rst = mysql_query($sql)
             or die(
"An Error Has Occurred!
                 \n MySQL Error Reports : "
.mysql_error()."
                 \n The Error Occured in "
.__FILE__." -> ".$C_NAME);
    
$rowRst = mysql_fetch_assoc($rst);
   }
   return
$rowRst;
  }
?>


nick smith
19-Sep-2005 09:07

i'm fairly new to this but have just managed to set up (on windows xp) apache 2.0.54 with php 5.0.4 and mySQL 4.1.13, also phpMyAdmin 2.6.4 having had exactly the problems reported by so many others. i wasnt actually aware of mySQL not being loaded in php until i tried to use phpmyadmin and it told me to check my php/mysql configuration.

basically i just did everything that is mentioned by others (setting extension_dir to c:\php\ext ( not c:\php\ext\ ), uncommenting extension=php_mysql.dll from php.ini and putting c:\php into my PATH) but i was still getting the infuriating message when trying to start apache that php_mysql.dll could not be found.

i restarted my machine and it worked! It seems i had to restart windows after editing my PATH. i didnt bother restarting until it was the last resort because on xp i have NEVER had to do this before - changes to System Variables always took effect immediately. I could understand this on, say, windows 98 where you put the addition to your PATH into your autoexec.bat but why i had to do this with xp is a mystery.

Anyway, give it a go, it might save you tearing out prescious hair!

N.


tyler at gmail.com
06-Sep-2005 12:51

The Windows XP .msi package of PHP 5.0.whatever comes with a weird config that disables MySQL.

I did this through trial and error, but to enable MySQL, do what the previous comment says, and then uncomment the php_mysql.dll which is listed a ways down the INI (I used the php.ini-recommended file) with the huge list of DLLs.


avis_del at yahoo dot com
01-Sep-2005 10:14

I aggree with j at jonathany.com

PHP 5.04 to MySQL,
php_mysql.dll will not found on windows installer (.msi)
just extract from .zip file (can download).
It works.

1. cgi.force_redirect = 0
2. extension_dir = "c:\php\ext"
3. extension=php_mysql.dll

untill on phpinfo.php show

MySQL Support enabled
Active Persistent Links  0 
Active Links  0 
Client API version  4.1.12


claude(at)claude(dot)nl
25-Aug-2005 04:23

A note on resources

When a resource (e.g. a link identifier) runs out of scope, it is deleted and the associated computer resources (e.g. the tcp link to the database) will be terminated as well. So far so good!
However, in the following code the tcp mysql link persists until the end of execution:
<?php
$conn
= mysql_connect('hostname', 'username','password');
$conn = null;
sleep (30);
?>
This is because the internally the link-identifier is being saved, so that subsequent mysql functions will work. There seems to be no way to delete this internal reference.
If you were, however, to open 2 connections, the oldest one will be deleted automatically (so the connection to hostname will terminate at the $conn=null statement, the connection to hostname2 will exist till the end of the script).
<?php
$conn
= mysql_connect('hostname', 'username','password');
$conn2 = mysql_connect('hostname2', 'username','password');
$conn = null;
$conn2 = null;
sleep (30);
?>


arjen at mysql dot com
04-Aug-2005 10:26

John Coggeshall wrote a PHP5 ext/mysqli compatibility script for applications that still use the old ext/mysql functions. This prevents the hassle of trying to have both the mysql and mysqli extensions loaded in PHP5, which can be tricky.

The script is at:
http://www.coggeshall.org/oss/mysql2i/


allan666 at NOSPAM dot gmail dot com
20-Jul-2005 12:37

[Editor's Note: In MySQL v5.0+, you can use the INFORMATION_SCHEMA tables to retrieve information on tables, views, databases and so on. --zak@php.net]

Here is a small function to parse a mysql creation table DDL. The function takes a string with the SQL code to create a table and returns the table name, table fields, table key fields and fields type, all in arrays (except by the name, obviously). The function requires that the primary key be named "id" and the foreign keys named "id...". All foreign key types are suposed to be int (or its variations, bigint, etc...). All those restrictions are easily modified to others needs.

Here is a example of a DDL code.

CREATE TABLE `telefones` (
  `id` int(11) NOT NULL auto_increment,
  `id_tipo_telefone` int(11) NOT NULL default '0',
  `numero` varchar(15) NOT NULL default '',
  `id_pessoa` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `id_tipo_telefone` (`id_tipo_telefone`),
  KEY `id_pessoa` (`id_pessoa`),
  CONSTRAINT `0_775` FOREIGN KEY (`id_tipo_telefone`) REFERENCES `tipos_telefone` (`id`),
  CONSTRAINT `0_776` FOREIGN KEY (`id_pessoa`) REFERENCES `pessoas` (`id`)
) TYPE=InnoDB

that returns

$tbname = "telefones"
$fields = array("numero");
$kfields = array("id_tipo_telefone","id_pessoa");
$tipos = array("varchar");

Hope it helps...

<?php
function parseQuery($Q, &$tbname, &$fields, &$kfields, &$tipos) {

/** rules to a corect parse:
 *
 *    1 - primary key must be named "id"
 *    2 - foreign key must be named "id..." eg.: id_field
 *    3 - lowercase is recomended
 */

  
$Q = str_replace(array(chr(10),chr(13))," ",$Q);
  
$Q = str_replace(array("'","`")," ",$Q);

  
preg_match("/([^(]*)\((.*)\)(.*)/",$Q,$A);

  
$part1 = $A[1];
  
$part2 = $A[2];
  
$part3 = $A[3];

  
preg_match("/(.*) ([a-zA-Z_]+)/",$part1,$A);

  
$tbname = strtolower($A[2]);

  
$temp = split(",",$part2);
   foreach (
$temp as $t) {
      
preg_match("/ *([a-zA-Z_]+) +([a-zA-Z_]+)(.*)/",$t,$A);
      
$pcampo = strtolower($A[1]);
      
$ptipo = strtolower($A[2]);
       if (!
preg_match("/$pcampo/","primary key constraint id unique foreign") )  {
           if ( (
$pcampo[0] == "i") && ($pcampo[1] == "d") )
              
$kfields[] = $pcampo;
           else {
              
$fields[] = $pcampo;
              
$tipos[] = $ptipo;
           }
       }
   }
}
?>


mmw_canada at yahoo dot com
11-Jul-2005 03:15

I Quote:

"Note: If when starting the web server an error similar to the following occurs: "Unable to load dynamic library './php_mysql.dll'", this is because php_mysql.dll and/or libmysql.dll cannot be found by the system."

Actully, the file may have been found, it is just the wrong version.

The "libmysql.dll" is packaged and sent with a number of applications and it can end up in different place on your computer.  The file may even be completely different, so just replacing it may cause problems with the other applications.

I searched for the this file and found that I had a number of different versions on my machine at once.  PHP was trying to use the WRONG ONE.

Maybe the name should be changed in later versions so that it doesn't encourage people to commit suicide or pull their hair out.


bahatest at ifrance dot com
07-Jul-2005 07:38

/*
* before mysql 4.1, timestamp have a defined size, but after 4.1, timestamp is equal to... datetime
* so, conversion is automatic when you import your dump in new mysql version, but your script cannot echo dates like before.
* this function took one date on DATETIME format, a size of old timestamp format and return the date in old timestamp format before 4.1
* Note : if $date is in TIMESTAMP format, the function return it unaltered. So we can patch our php code before migrate to 4.1
* @param $date a date in DATETIME format, or TIMESTAMP format after mysql 4.1
* @param $size a size of old TIMESTAMP format (14,12,10,8,6,4 or 2)
* @return the date in old TIMESTAMP format
*/
function mysql_convert_timestamp_to_previous_usage($date, $size) {
   $tab=split('[- :]', $date);
   if (sizeof($tab) != 6) return $date;
   if (($size!= 8) && ($size!= 14)) {
       $tab[0]=substr($tab[0], -2);
   }
   for ($i = 12; $i>$size; $i-=2) {
       unset($tab[sizeof($tab)-1]);
   }
   if ($size== 8) unset($tab[sizeof($tab)-1]);
   return implode("", $tab);
}


jimmy dot a dot gunawan at gmail dot com
03-Jul-2005 09:18

I almost desperately connect my apache 2.0.54 winversion to PHP 5.0.4 and MYSQL 4.1.12 under windows, since there are lack of any accurate information to setup them properly.
If you got any error message said: "Call to undefined function mysql_connect()", here is the right tips.

Apache installed in c:\apache\apachegroup
PHP installed in c:\php
Mysql installed in c:\mysql

1. Find and add c:\apache\apachegroup\conf\httpd.conf
   with:
     ScriptAlias /php/ "c:/php/"
     AddType application/x-httpd-php .php
     Action application/x-httpd-php "/php/php-cgi.exe"
2. Go to php directory c:\php then rename php.ini-dist to php.ini
   (or make a new php.ini based on old php.ini file),
   make sure we set the right extension:
       extension_dir = "c:\php\ext"
       extension=php_mysql.dll

If you setup an php script that call function php_info();
and you can find table:
MySQL Support enabled
Active Persistent Links  0 
Active Links  0 
Client API version  4.1.7

that mean the mysql.dll properly attached to suppport the php, happy SQL-ing


Microsoul V3
05-Jun-2005 12:47

I use IIS 6, PHP 5.04, Windows Server 2003 and MySQL 4.1.11. and here is what I was able to figure out.
To get MySQL and PHP to talk to each other, in the php.cfg, dont forget to turn on the tag
cgi.force_redirect = 0, and make sure you set it at 0 (it is default at 1. just delete the semi-colon from in front of it to activate it in the code) Then the phpinfo will say its reading the cfg from your PHP install directory instead of your WINDOWS root. Then your phpinfo will show the MySQL entry that some people may be having a hard time with. No registry settings or copying of anything is needed. Also follow the rest of the excellent help from the user comments. Here's what I did, to make it simple:
I made a folder in the folder tree just above program files (explore your computer) and named it PHP. I extracted the .zip php version into it (not the auto install version). I edited the php.ini-recommended, renamed it to just php, added my sql username, database name, etc.( you really gotta look closely at the cfg file and make sure you dont overlook something). Turned on the extension=php_mysql.dll (just delete the semi-colon thats in front of it). Added the php folder to the PATH (instructions on how to do this are pretty simple, and documented above). I also made the ext folder available to the PATH, but Im not sure if it's really necessary. The user comments are what really helped me, so I thought I would return the favor, and try to expand on this topic a little bit.


noel at nettensity dot com
29-May-2005 08:20

More On Windows 2003 Server / IIS 6.0:

It might (probably) be necessary to add both the path to PHP and the path to the extensions dir to your environmental variables.

To do this:
1) Right-Click on 'My Computer'
2) Select 'Properties'
3) Click the 'Advanced' tab
4) At the bottom of this dialog box, click the 'Environmental Variables' button
5) In the frame titled 'System Variables', scroll-down until you find 'Path'
6)Add your path to PHP and your path to the extensions folder i.e. c:\php;c:\php\ext. Make sure all the paths are seperated by semi-colons, and make sure not to erase any of the other paths already in there.

I meant to include this in my note below, apologies for any confusion.


noel at nettensity dot com
29-May-2005 07:04

Enabling MySQL with Windows Server 2003/IIS 6.0:
Find your php.ini file first, check phpinfo() to see where php is currently looking for php.ini. (i.e. Using the Windows installer for PHP 5.0.4, the php.ini file was placed in the C:\Windows dir.) I recommend, however, that you don't use the installer - go with full manual install.

Set the following in php.ini:
display_errors = on
error_reporting = E_ALL
This will make sure that you'll see any errors that arise during configuration. MAKE SURE TO CORRECT THESE WHEN YOU ARE DONE PLAYING WITH PHP.INI! Do not leave these settings like this on a production machine.

In php.ini set the following:
extension_dir = "pathtoextensions (ususally [yourpathtophp]\ext)"
extension=php_mysql.dll (make sure this is un-commented if its already in your php.ini)

In IIS, open Web Service Extensions, click "Add a new Web service extension..."
Type-in PHP for the extension name
Under required files:
Add  [yourpathtophp]\php5isapi.dll
Add  [yourpathtophp]\php5ts.dll
Click 'Apply' then click 'OK'

Create web sites like you normally would, but make sure they have executable permissions, not just script access. Under the "Home Directory" tab, click 'Configuration'. Scroll down the list at the top and see if you can find PHP. If you do, make sure the path to the executable for PHP is correct. If you don't find PHP in the list, click 'Add...', then browse to the correct executable, [yourpathtophp]\php5isapi.dll, and click OK. In the extension field, enter 'PHP'. Verbs should already be set to 'All verbs', leave it like that.

Create a test page with this code:
<? echo(phpinfo()); ?>
call it test.php, and place this file into the web site you just created. Browse to the page, with firefox preferably ;), and make sure that you have a MySql section with some MySql info in there. If not, then your paths are possibly screwed up, or you're still not editing the correct php.ini (again, look at the location that phpinfo() shows you, and just edit it there if you have to, then move it afterwards and re-config).

Hope this helps!


disappear dot nz at gmail dot com
22-May-2005 06:39

Hi,

this is a small OOP script to provide an easy connction to the mysql db and to get associative / logical / both arrays.

<?php

  
class mysql_array
  
{
  
      
public function __construct ( $s_host , $s_user , $s_pass , $s_db )
       {
          
$this -> r_conn = mysql_connect ( $s_host , $s_user , $s_pass ) or die ( mysql_error ( ) ) ;
          
mysql_select_db ( $s_db ) ;
       }
      
      
private function array_make ( $s_sql , $i_type )
       {
          
$r_rs = mysql_query ( $s_sql , $this -> r_conn ) or die ( mysql_error ( ) ) ;
           while (
$a_col = mysql_fetch_array ( $r_rs , $i_type ) )
           {
              
$a_rs [ ] = $a_col ;
           }
          
mysql_free_result ( $r_rs ) ;
           return (
$a_rs ) ;
       }

      
public function array_logic ( $s_sql )
       {
          
$a_rs = $this -> array_make ( $s_sql , MYSQL_NUM ) ;
           return (
$a_rs ) ;
       }

      
public function array_assoc ( $s_sql )
       {
          
$a_rs = $this -> array_make ( $s_sql , MYSQL_ASSOC ) ;
           return (
$a_rs ) ;
       }

      
public function array_both ( $s_sql )
       {
          
$a_rs = $this -> array_make ( $s_sql , MYSQL_BOTH ) ;
           return (
$a_rs ) ;
       }

   }

  
$o_mysql = new mysql_array ( 'localhost' , 'user' , 'pass' , 'db' ) ;   
  
$s_sql = "SHOW TABLES" ;
  
$a_rs = $o_mysql -> array_assoc ( $s_sql ) ;
  
   echo
'<pre>' ;
  
print_r ( $a_rs ) ;

?>


medic at setiherbipolis dot de
15-May-2005 05:42

Client does not support authentication protocol requested by server; consider upgrading MySQL client

means that you're using an old version of MySQL Client ( possibly not mysqli)

Authentication protocol for MySQL has changed with version 4.1.

To get a hint at which mysql-client version you're using try phpinfo();


Chad
07-May-2005 04:58

I had the same problem with the new Mac OS Tiger Server. Refer to http://dev.mysql.com/doc/mysql/en/old-client.html

Worked for me.


04-May-2005 03:12

1) Windows users will need to enable php_mysql.dll  inside of php.ini
2) make libmysql.dll available to the PATH
3) change this in your php.ini file:
   extension_dir = "./" to something like "c:\php\ext"


jonathan at belial dot co dot uk
14-Apr-2005 09:36

I spent the last age and a day trying to get mysql 4.1.1. to tie into php 5 with no avail... be sure to set:
PHPIniDir "C:/php"
in your httpd.conf file. If you do not then phpinfo() will report that your extension directory is 2c:/php5" and thereby ignore any extensions you attempt to include in your php.ini.
Good Luck.


06-Mar-2005 08:01

If you are installing PHP5 on Windows 2003 server (AKA Win 2k3) and need MySQL to work using the either the php_mysql.dll or php_mysqli.dll or both of them at the same time, and MySQl isn't showing up in phpinfo, then your php.ini is probably not loading.  In the direction in the PHP 5 zip file, they will tell you to add your PHP install directory to your windows path.  This should tell php where to load its php.ini from but it doesn't.  If you want to get this to work, you don't have to copy any DLL's anywhere like everyone suggests.  All you have to do is add the folling regsitry key to windows:

[HKEY_LOCAL_MACHINE\SOFTWARE\PHP]
"IniFilePath"="C:\\PHP"

simply copy the above 2 lines of code into a text file and save the file as php_ini_path.reg

After you save the file it will look like a registry file.  Simply double click on it.

It will make it so PHP will look for your php.ini in C:\PHP.  I would assume you can edit this if you install php into a different location, but I haven't tried that.

After running the reg file, make sure your php.ini is in your PHP dir and make sure all the appropriate things are set.  This should get you up and running.  Make sure you also follow all the steps on how to make it work in IIS.  This is just an addition to the direction.


Protik Mukherjee
03-Mar-2005 06:34

Fedora mysql problems!!
In Fedora 3 the php mysql module does not come with the default installation. To install it use $>yum install php_mysql
If u dont do this you will get errors with mysql functions like mysql_connect()

Hope this helps!


j at jonathany.com
01-Feb-2005 09:09

Users attempting to install MySQL under PHP5 on Windows may have trouble if they use the MSI installer of PHP, which does not include the DLL php_mysql.dll .

In order to succesfully install MySQL on PHP5, download the ZIP version of PHP, which includes the php_mysql.dll.


tumaine no at spam verizon net
23-Dec-2004 05:21

I had a hard time with upgrading to php version 5.2.0 in Windows XP Pro since mySQL queries all of a sudden stopped working and led to blank pages on my site.  I spent a good half day searching google trying to figure out this problem, and didn't quite know how compiling PHP would help me.  It is not necessary.  Set up PHP manually with the ZIP folder download. 

This is a good link to read and wish I found it earlier:

http://www.zend.com/manual/install.windows.extensions.php

If you are getting an error popup about not being able to load some mysql.dll when starting apache, you need to change this in your php.ini file:

extension_dir = "./" to something like "c:\php\ext"
 
Also what I was doing wrong was that I forgot to uncomment the following line in my php.ini file:

extension=php_mysql.dll

Restart apache, and everything should work.

Thought that I could save someone time and frustration when upgrading, since versions 5+ do not include mySQL support by default as earlier versions apparently do.


jon at mysql dot com
11-Dec-2004 11:32

Re Pat's note: You can add the --old-passwords option in the [mysqld] section of your MySQL my.cnf or my.ini configuration file. This option will force the MySQL server  to use the old-style password hashing for all connections. This is not really recommended, as it's less secure, but will allow you to use existing accounts without resetting the passwords.

Of course, as already mentioned, you can use the MySQL OLD_PASSWORD() function instead to handle this issue on an account-by-account basis.

The optimal solution when migrating to MySQL 4.1+ from a previous version is to upgrade to PHP 5 (if you're not using it already) and rewrite any code accessing MySQL using the mysqli extension, which is more secure and provides a much better API.

For more information, see the MySQL Manual: http://dev.mysql.com/doc/mysql/en/Application_password_use.html


lkujala at uniserve dot com
18-Nov-2004 10:43

PROBLEM:
Error Message: the specified module could not be found.
When trying to load a php_mysql.dll / php_mysqli.dll / php_mssql.dll extension on a Windows platform.

CAUSE:
The standard windows installer package is rather incomplete; it does not include any of the DLL's needed for the optional extensions. In order to use any extension you need to install the FULL zip distribution (unless you like fooling around with dll hell), not just the php_*.dll extensions. You might as well include ALL of the DLL's since the dependencies as documented are wrong (i.e. you need more than libmysql.dll for the php_mysql.dll to load).

I did find the standard windows installer useful for the inital setup though.


22-Oct-2004 04:04

Having trouble loading extensions under windows? Seems as though php.ini is not being read at all?

Maybe the php5 installer has written a PHPIniDir directive in your httpd.conf telling php to look for php.ini in c:\php\


nleippe at integr8ted dot com
13-Oct-2004 12:22

trace_mode breaks SQL_CALC_FOUND_ROWS.
This is because it emits an EXPLAIN <query> before sending the <query> by itself, thus the subsequent SELECT FOUND_ROWS() is no longer the next consecutive query, and the result is zero.
This was true for me for at least MySQL 4.0.21 and 4.1.5gamma.
(PHP 4.3.9)


Melvin Nava: e-4(at)venezolano.web.ve
13-Sep-2004 09:02

To count page hits, just put next code in a text file and include it in every one of your pages. It will log even different querystrings as different pages. (a MySQL database and table is needed first)

This can be a pretty good example of what you can do with PHP and MySQL. I made this script to log and show all hits in: http://www.venezolano.web.ve/

<?php
/************************
This needs a MySQL table you can create with this:

CREATE TABLE `stats_pagecounter` (
  `id` int(25) NOT NULL auto_increment,
  `page_name` varchar(255) NOT NULL default '',
  `page_hits` int(25) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;

**************************
COUNTING STARTS
*************************/
function page_count($page) {
  
$c_link        = mysql_connect('localhost', 'username', 'password')
       or die(
'counter CONNECT error: '.mysql_errno().', '.mysql_error());
  
mysql_select_db('database_name');
  
$c_query    = "SELECT * FROM stats_pagecounter
       WHERE (page_name = '$page')"
;
  
$c_result    = mysql_query($c_query, $c_link)
       or die(
'counter SELECT error: '.mysql_errno().', '.mysql_error());
   if (
mysql_num_rows($c_result)) {
      
$row=mysql_fetch_array($c_result,MYSQL_ASSOC);
      
$pcounter = $row['page_hits']+1;
      
$c_update = "UPDATE stats_pagecounter
           SET page_hits = '$pcounter' WHERE page_name = '$page'"
;
      
$c_hit = mysql_query($c_update, $c_link)
           or die(
'counter UPDATE error: '.mysql_errno().', '.mysql_error());
   } else {
      
$c_insert = "INSERT INTO stats_pagecounter
           VALUES ( '0', '$page', '1')"
;
      
$c_page = mysql_query($c_insert, $c_link)
           or die(
'counter INSERT error: '.mysql_errno().', '.mysql_error());
      
$pcounter = 1;
   }
  
mysql_free_result($c_result);
  
mysql_close($c_link);
   return
$pcounter;
}
$phpself_url = $_SERVER['SERVER_NAME'].
  
$_SERVER['PHP_SELF'].'?'.
  
$_SERVER['QUERY_STRING'];
$page_hits = page_count($phpself_url);
/************************
COUNTING ENDS
*************************/

/************************
Put next line in a page to show his page hits
(If you want to)
************************/
echo $page_hits;
?>


aidan at php dot net
15-Aug-2004 02:59

If you want to replicate the output of `mysql --html`, printing your results in a HTML table, see this function:

http://aidan.dotgeek.org/lib/?file=function.mysql_draw_table.php


irn-bru at gmx dot de
27-May-2004 02:27

Note, that the sql.safe_mode configuration setting does effect all mysql_* functions. This has nothing to to with the php safe mode, check the [SQL] section in php.ini.

I found out, that if you set sql.safe_mode = On, mysql_connect will ignore provided username and passwort and makes use of the script owner instead (checked on debian).

Brian


Pat
23-Jan-2004 12:02

[Editor Note:
The password hashing was updated in MySQL 4.1, you must use the MySQLi extension with MySQL 4.1+ (or use the following method to allow
pre 4.1 clients to connect).]

MySQL 5.0 has a new password system, and PHP cannot connect to it because it cannot send a correct password.  You must use the MySQL command OLD_PASSWORD() when adding a user to the database, or PHP cannot connect as of the library that comes with PHP 5.0Beta3


gyohng at netscape dot net
20-Jun-2003 07:16

The following page contains a complete easy to read tutorial of MySQL programming with PHP.

http://www.yohng.com/phpm/


soren at byu dot edu
14-Mar-2003 10:23

Let's say that you want to generate a MySQL password hash from a plain text password.  Normally, you would just submit the MySQL query "SELECT PASSWORD('password')", but if for some reason you can't access to MySQL database directly, then you can use the following function (translated right out of the MySQL source code):

<?php
function mysql_password($passStr) {
      
$nr=0x50305735;
      
$nr2=0x12345671;
      
$add=7;
      
$charArr = preg_split("//", $passStr);

       foreach (
$charArr as $char) {
               if ((
$char == '') || ($char == ' ') || ($char == '\t')) continue;
              
$charVal = ord($char);
                
$nr ^= ((($nr & 63) + $add) * $charVal) + ($nr << 8);
              
$nr2 += ($nr2 << 8) ^ $nr;
                
$add += $charVal;
       }

       return
sprintf("%08x%08x", ($nr & 0x7fffffff), ($nr2 & 0x7fffffff));
}
?>

example:

<? print mysql_password("hello"); ?>

outputs:

70de51425df9d787

Which is the same result you get if you do "SELECT PASSWORD('hello')" directly in MySQL.  Hopefully you'll never be in a situation where you have to use this, but if you need it (like I did), it's here.


past at sbox dot tugraz dot at
21-Feb-2003 11:17

As MySQL docs say, RAND() is not very usefull for generation of randomized result orders.

But this worked for me on Linux, however:
Somewhere before:
mt_srand((double)microtime()*1000000);
 
"SELECT *, " RAND(".mt_rand(0,86622340).")*10000%100 AS randomvalue ORDER BY randomvalue"

The upper value for mt_rand() has to be Quite Big to see any effect on MySQL's RAND(). The exact number shouldn't be significant. Note the multiplication and modulo; MySQL seems to count steadily upwards when generating random numbers, so we take some numbers from between.


mijnpc at xs4all dot nl
20-Nov-2002 11:33

If you have a Windows machine running a webserver with PHP you don't need to install MySQL server to locally test scripts, if you are granted to establish a Secure Telnet connection (port 22) to the remote webserver.

To do this you need a Secure Telnet client, which supports port-forwarding.
Before you establish a connection, define the port-forward.
Forward local port 3306 to [name or ip of remote server]:3306
Make sure that local ports accept connections from other hosts
Save this session

Connect to remote server with username and password
Minimize the shell and that's it...

You can use the same username (and password) as if you were working on the remote server !
E.g. : $link = mysql_connect("localhost", "root", "") or die("no way jose");

You may get a shell-timeout after xx minutes depending on your remote server, just reconnect or press enter in the shell once in a while...

An example of a superb freeware Secure Telnet client is Putty : Putty : http://www.chiark.greenend.org.uk/~sgtatham/putty/

This 'discovery' really has saved me a lot of time because I don't have to upload the scripts to the remote server time and time again, pressing [save] is enough, heh (-:


16-Jun-2002 09:38

Regarding transactions, you must use a recent MySQL version which supports InnoDB tables. you should read the mysql manual (the part about Innodb tables, section 7.5) and configure your server to use them.
Some reading about how it works:
http://php.weblogs.com/discuss/msgReader$1446?mode=topic
(Click where it says Part2, I can't put the direct URL here because it is too long)

Then in PHP you use commands like:

mysql_query("BEGIN");
mysql_query("COMMIT");
mysql_query("ROLLBACK");

You must make sure that you convert your existing tables to innodb or create new ones: CREATE TABLE (...) type=innodb;


jeyoung at priscimon dot com
25-Apr-2002 06:23

[Ed. Note:
This may be due to the fact that subsequent calls to mysql_connect with the same parameters return the same resource id for the connection, so in reality it is using the same connection.  In order to force a new link, you must specify the new_link parameter in mysql_connect.]

MySQL transactions

MySQL supports transactions on tables that are of type InnoDB. I have noticed a behaviour which is puzzling me when using transactions.

If I establish two connections within the same PHP page, start a transaction in the first connection and execute an INSERT query in the second one, and rollback the transaction in the first connection, the INSERT query in the second connection is also rolled-back.

I am assuming that a MySQL transaction is not bound by the connection within which it is set up, but rather by the PHP process that sets it up.

This is a very useful "mis-feature" (bug?) because it allows you to create something like this:

class Transaction {
  var $dbh;

  function Transaction($host, $username, $password) {
   $this->dbh = mysql_connect($host, $username, $password);
  }

  function _Transaction() {
     mysql_disconnect($this->dbh);
  }

  function begin() {
   mysql_query("BEGIN", $this->dbh);
  }

  function rollback() {
     mysql_query("ROLLBACK", $this->dbh);
  }

  function commit() {
   mysql_query("COMMIT", $this->dbh);
  }
}

which you could use to wrap around transactional statements like this:

$tx =& new Transaction("localhost", "username", "password");
$tx->begin();
$dbh = mysql_connect("localhost", "username", "password");
$result = mysql_query("INSERT ...");
if (!$result) {
  $tx->rollback();
} else {
  $tx->commit();
}
mysql_disconnect($dbh);
unset($tx);

The benefit of such a Transaction class is that it is generic and can wrap around any of your MySQL statements.


nospam at nospam dot nos
19-Nov-2001 06:17

ever wanted to know the date a table was last updated? use this:

$info = mysql_fetch_array(mysql_query("show table status from databasename like 'tablename'"));
echo $info["Update_time"];


skelley at diff dot nl
25-Sep-2001 11:11

Hi, here's a nice little trick to select records in random order from a table in a MySQL database prior to version 3.23

SELECT *, (ItemID/ItemID)*RAND() AS MyRandom FROM Items ORDER BY MyRandom

[Editors note: And just "SELECT * FROM foo ORDER BY RAND()" after 3.23]


mbabcock-php at fibrespeed dot net
29-Jul-2001 04:41

Since there aren't functions to start and end/rollback transactions, you'll have to use mysql_query("BEGIN"), mysql_query("COMMIT") and mysql_query("ROLLBACK").  These will only work properly on tables that support transactions.  You may also wish to roll your own mysql_begin (etc) functions that run the above queries for you.


philip at cornado dot com
23-Jul-2001 09:24

If you're new to this, you really should learn basic SQL before moving on.  PHP != SQL. Here's are a few good basic SQL tutorials:

  * http://www.sqlcourse.com/
  * http://www.w3schools.com/sql/
  * http://www.oreillynet.com/pub/ct/19


mw-php at ender dot com
22-Jun-2001 06:11

The mysql_fetch_[row|object|array] functions return data as type string. Owing to the very flexible nature of php variables, this is normally not relevent, but if you happen to retrieve two integers from a database, then try to compare with bitwise operators, you'll run into trouble, because (19 & 2) == 2, but ("19" & "2") == 0. To remedy this, if you use variables from a database with bitwise operators, use the settype() function to explicitly cast your variables as integers before comparing.


 

 
  © 1996-2012 & Reporter.plmiejscao serwisieabonamentwarunki korzystaniaRSSkontakt