CakeFest 2024: The Official CakePHP Conference

mysql_info

(PHP 4 >= 4.3.0, PHP 5)

mysql_infoEn son sorgu hakkında bilgi al

Uyarı

Bu eklentinin kullanımı PHP 5.5.0 itibariyle önerilmemekte olup PHP 7.0.0'da kaldırılmıştır. Bu eklentinin yerine ya mysqli ya da PDO_MySQL eklentisi kullanılmalıdır. MySQL API seçerken MySQL API'ye Bakış belgesi yardımcı olabilir. Bu işlevin yerine kullanılabilecekler:

Açıklama

mysql_info(resource $bağlantı_belirteci = null): string

Son sorgu hakkında ayrıntılı bilgi döndürür.

Bağımsız Değişkenler

bağlantı_belirteci

MySQL bağlantısı. Eğer bağlantı belirteci belirtilmemişse mysql_connect() tarafından açılan son bağlantı kullanılmaya çalışılır. Eğer böyle bir bağlantı yoksa mysql_connect() bağımsız değişkensiz olarak çağrılmış gibi bir bağlantı oluşturmaya çalışır. Hiçbir bağlantı yoksa ve yenisi de kurulamazsa E_WARNING seviyesinde bir hata üretilir.

Dönen Değerler

Başarı durumunda ifade ile ilgili bilgi, hata durumunda false döndürür. Hangi deyimlerin ne değer döndürdüğünü görmek için aşağıdaki örneğe bakın. Burada listelenmemiş deyimler false döndürecektir.

Örnekler

Örnek 1 - İlgili MySQL Deyimleri

Dizge döndüren deyimler. Sayılar sadece betimleme amaçlıdır; yani, değerleri sorguya göre olacaktır.

INSERT INTO ... SELECT ...
String format: Records: 23 Duplicates: 0 Warnings: 0
INSERT INTO ... VALUES (...),(...),(...)...
String format: Records: 37 Duplicates: 0 Warnings: 0
LOAD DATA INFILE ...
String format: Records: 42 Deleted: 0 Skipped: 0 Warnings: 0
ALTER TABLE
String format: Records: 60 Duplicates: 0 Warnings: 0
UPDATE
String format: Rows matched: 65 Changed: 65 Warnings: 0

Notlar

Bilginize:

mysql_info() işlevi, INSERT ... VALUES deyimi için sadece ve sadece deyimde birden fazla değer listesi belirtildiği takdirde false dışında bir değer döndürecektir.

Ayrıca Bakınız

add a note

User Contributed Notes 5 notes

up
7
info at granville dot nl
18 years ago
Imade a quick conversion of eric's function just to count matched or affected rows from a query.

/**GD gdf_db_count_query_v1: returns the amount of rows matched or affected by the last query. Must be used immediately after the concerned query.
*/

function gdf_db_count_query($link = 'dbh') {

$info_str = mysql_info($$link);

if (ereg("Records: ([0-9]*)", $info_str, $count) == false) {
ereg("Rows matched: ([0-9]*)", $info_str, $count);
}

return $count;

}
up
5
eric at projectsatellite dot com
20 years ago
I agree that this is a useful function to use when trying to check on whether an update query matched a particular row. I created a simple function that returns an associative array with the values delineated in the returned string.

function get_mysql_info($linkid = null){
$linkid? $strInfo = mysql_info($linkid) : $strInfo = mysql_info();

$return = array();
ereg("Records: ([0-9]*)", $strInfo, $records);
ereg("Duplicates: ([0-9]*)", $strInfo, $dupes);
ereg("Warnings: ([0-9]*)", $strInfo, $warnings);
ereg("Deleted: ([0-9]*)", $strInfo, $deleted);
ereg("Skipped: ([0-9]*)", $strInfo, $skipped);
ereg("Rows matched: ([0-9]*)", $strInfo, $rows_matched);
ereg("Changed: ([0-9]*)", $strInfo, $changed);

$return['records'] = $records[1];
$return['duplicates'] = $dupes[1];
$return['warnings'] = $warnings[1];
$return['deleted'] = $deleted[1];
$return['skipped'] = $skipped[1];
$return['rows_matched'] = $rows_matched[1];
$return['changed'] = $changed[1];

return $return;
}

After trying to update a row that may or may not exist, you can use the above function like so:

$vals = get_mysql_info($linkid);
if($vals['rows_matched'] == 0){
mysql_query("INSERT INTO table values('val1','val2', 'valetc')", $linkid);
}
up
4
tomas at matfyz dot cz
15 years ago
Please note that the information on warning count cannot be taken from the mysql_info() due to mysql bugs #41283 and #41285:

http://bugs.mysql.com/?id=41283
http://bugs.mysql.com/?id=41285
up
1
bdobrica at gmail dot com
17 years ago
As a solution to the problem pointed in the post reffering to mysql_affected_rows() returning 0 when you are making an update query and the fields are not modified although the query is valid, i'm posting the following function. It is very simple and based on a previous post.

function mysql_modified_rows () {
$info_str = mysql_info();
$a_rows = mysql_affected_rows();
ereg("Rows matched: ([0-9]*)", $info_str, $r_matched);
return ($a_rows < 1)?($r_matched[1]?$r_matched[1]:0):$a_rows;
}

Hope you'll find it usefull.
up
-8
carl at NOSPAMthep dot lu dot se
21 years ago
This function can be used as a workaround for a misfeature of MySQL: on an UPDATE, rows that aren't updated _solely because they looked the same before_ will not be seen in mysql_affected_rows(). This causes problems when you want to use the result of the update to determine if there's need to do an INSERT. With MySQL you can do an INSERT IGNORE if there's no risk of if failing because of a duplicate key other than the one used in the UPDATE. However, if this isn't the case or you want a bit of RDBMS independence, there's no easy/pretty workaround. I think I'll resort to doing a SELECT to determine the primary key before doing the update/insert, as using the CVS version of PHP isn't an option for me.
To Top