To use "PDO::MYSQL_ATTR_USE_BUFFERED_QUERY" you should call
PDO::setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
It will not work when passed into PDO::prepare()
PDO_MYSQL, PHP Veri Nesneleri Arayüzünün (PDO) MySQL veritabanlarına erişimini mümkün kılmak için gerçeklenmiş bir sürücüdür.
PDO_MYSQL eklentisi, öntanımlı olarak öykünülmüş hazır deyimleri kullanır.
MySQL 8
7.1.16'dan önceki bir PHP sürümünü veya 7.2.4'ten önceki PHP 7.2'yi çalıştırırken, MySQL 8 Sunucusunun öntanımlı parola eklentisini mysql_native_password olarak ayarlayın, aksi takdirde, caching_sha2_password kullanılmadığında bile "sunucu tarafından istenen [caching_sha2_password] kimlik doğrulama yöntemini istemci bilmiyor" anlamında The server requested authentication method unknown to the client [caching_sha2_password] gibi hatalar görürsünüz.
Bunun nedeni MySQL 8'in öntanımlı olarak eski PHP (mysqlnd) sürümleri
tarafından tanınmayan bir eklenti olan
caching_sha2_password'e ayarlanmasıdır.
my.cnf'de
default_authentication_plugin=mysql_native_password
ayarını yaparak bunu değiştirin.
caching_sha2_password eklentisi PHP 7.4.4 itibariyle
desteklenmektetir. PHP 7.4.4 öncesinde, bunu
destekleyen mysql_xdevapi
eklentisi kullanılabilir.
Dikkat: Bazı MySQL tablo türleri (saklama motorları) toplu hareketleri desteklemez. Bir veritabanını kodlarken toplu hareketleri desteklemeyen bir tablo türünü kullanıyorsanız MySQL toplu hareketi başarıyla ilklendirmiş gibi yapar. Ayrıca, DDL sorguları, bekleyen toplu hareketlerin örtük olarak yerine getirilmesine de sebep olur.
Bilginize:
MySQL sürücüsü
PDO::PARAM_INPUT_OUTPUT
sabitini PDOStatement::bindParam() üzerinden düzgünce desteklemez; böyle bağımsız değişkenler kullanılabilirse de, bunlar güncellenmez (yani, mevcut çıktı yoksayılır).
The common Unix distributions include binary versions of PHP that can be installed. Although these binary versions are typically built with support for the MySQL extensions, the extension libraries themselves may need to be installed using an additional package. Check the package manager that comes with your chosen distribution for availability.
For example, on Ubuntu the php5-mysql
package installs
the ext/mysql, ext/mysqli, and PDO_MYSQL PHP extensions. On CentOS,
the php-mysql
package also installs these three
PHP extensions.
Alternatively, you can compile this extension yourself. Building PHP from source allows you to specify the MySQL extensions you want to use, as well as your choice of client library for each extension.
When compiling, use --with-pdo-mysql[=DIR] to install
the PDO MySQL extension, where the optional [=DIR]
is the MySQL base library. Mysqlnd
is the default library. For details about choosing a library, see
Choosing a MySQL library.
Optionally, the --with-mysql-sock[=DIR] sets to location to the MySQL unix socket pointer for all MySQL extensions, including PDO_MYSQL. If unspecified, the default locations are searched.
Optionally, the --with-zlib-dir[=DIR] is used to set the path to the libz install prefix.
$ ./configure --with-pdo-mysql --with-mysql-sock=/var/mysql/mysql.sock
SSL support is enabled using the appropriate
Pdo\Mysql::ATTR_SSL_*
,
which is equivalent to calling the
» MySQL C API function mysql_ssl_set().
Also, SSL cannot be enabled with PDO::setAttribute()
because the connection already exists.
See also the MySQL documentation about
» connecting to MySQL with SSL.
Bu sabitler bu sürücü tarafından
tanımlanmış olup, sadece eklentinin PHP içinde derlenmiş olması veya çalışma
anında dinamik olarak yüklenmesi halinde kullanılabilir. Ek olarak, bu
sürücüye özgü sabitler sadece bu sürücü kullanılıyorsa kullanılmalıdır.
Sürücüye özgü özniteliklerin postgres sürücüsü ile kullanılması beklenmedik
davranışlara yol açabilir. Eğer kodunuz çok sayıda sürücüye karşı çalışıyorsa
sürücüyü sınayacak PDO::ATTR_DRIVER_NAME
özniteliğini
sağlamak için PDO::getAttribute()
kullanılabilir.
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
(bool)
false
atanırsa MySQL sürücüsü tamponlu kipi kullanır.
Örnek 1 - MySQL sürücüsünde tamponlu kipi zorlamak
<?php
$pdo = new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_password');
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
$unbufferedResult = $pdo->query("SELECT Name FROM City");
foreach ($unbufferedResult as $row) {
echo $row['Name'] . PHP_EOL;
}
?>
PDO::MYSQL_ATTR_LOCAL_INFILE
(int)
LOAD LOCAL INFILE
etkin olur.
Bu sabitin, yeni bir veritabanı tanıtıcısı oluştururken yalnızca
driver_options
dizisinde kullanılabileceğini
unutmayın.
PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY
(string)
LOCAL DATA yüklemesinin bu belirlenmiş dizinde bulunan dosyalarla sınırlanmasına izin verir. PHP 8.1.0 ve sonrasında kullanılabilir.
Bu sabitin, yeni bir veritabanı tanıtıcısı oluştururken yalnızca
driver_options
dizisinde kullanılabileceğini
unutmayın.
PDO::MYSQL_ATTR_INIT_COMMAND
(string)
MySQL sunucusuna bağlanırken çalıştırılacak komut. Yeniden bağlantı sırasında otomatik olarak bu komut çalıştırılır.
Bu sabitin, yeni bir veritabanı tanıtıcısı oluştururken yalnızca
driver_options
dizisinde kullanılabileceğini
unutmayın.
PDO::MYSQL_ATTR_READ_DEFAULT_FILE
(int)
Seçenekler my.cnf yerine burada belirtilen dosyadan okunur. Bu seçenek, mysqlnd ile kullanılamaz, çünkü mysqlnd, mysql yapılandırma dosyalarını okumaz.
PDO::MYSQL_ATTR_READ_DEFAULT_GROUP
(int)
Seçenekler my.cnf dosyasında belirtilen gruptan veya
MYSQL_READ_DEFAULT_FILE
ile belirtilen dosyadan
okunur. Bu seçenek, mysqlnd ile kullanılamaz, çünkü mysqlnd, mysql
yapılandırma dosyalarını okumaz.
PDO::MYSQL_ATTR_MAX_BUFFER_SIZE
(int)
Azami tampon büyüklüğü; 1 MiB öntanımlıdır. Derleme mysqlnd'ye rağmen yapıldığında bu sabit desteklenmez.
PDO::MYSQL_ATTR_DIRECT_QUERY
(int)
Hazır deyimler kullanılmaz, sorgular doğrudan çalıştırılır.
PDO::MYSQL_ATTR_FOUND_ROWS
(int)
Değişen satırların değil, bulunan (eşleşen) satırların satısı döner.
PDO::MYSQL_ATTR_IGNORE_SPACE
(int)
İşlev isimlerinden sonra boşluklara izin verir. Tüm işlev isimlerini ayrılmış sözcük haline getirir.
PDO::MYSQL_ATTR_COMPRESS
(int)
Ağ iletişim sıkıştırmasını etkin kılar.
PDO::MYSQL_ATTR_SSL_CA
(int)
SSL sertifika yetkilisinin dosya yolu.
PDO::MYSQL_ATTR_SSL_CAPATH
(int)
PEM biçiminde saklanan güvenilir SSL CA sertifikalarını içeren dizinin dosya yolu.
PDO::MYSQL_ATTR_SSL_CERT
(int)
SSL sertifikasının dosya yolu.
PDO::MYSQL_ATTR_SSL_CIPHER
(int)
OpenSSL tarafından anlaşılan biçemde, SSL şifrelemesi için kullanılmasına
izin verilen bir veya daha fazla şifrenin listesi. Örnek:
DHE-RSA-AES256-SHA:AES128-SHA
PDO::MYSQL_ATTR_SSL_KEY
(int)
SSL anahtarının dosya yolu.
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT
(int)
Sunucu SSL sertifikasının doğrulanmasını devre dışı bırakmanın bir yolunu sağlar. Bu seçenek yalnızca mysqlnd ile kullanılabilir.
Mevcut olduğu PHP sürümleri: 7.0.18 ve PHP 7.1.4.
PDO::MYSQL_ATTR_MULTI_STATEMENTS
(int)
false
olarak ayarlandığında hem PDO::prepare()
hem de PDO::query() işlevinde çoklu sorgu yürütmesini
devre dışı bırakır.
Bu sabitin, yeni bir veritabanı tanıtıcısı oluştururken yalnızca
driver_options
dizisinde kullanılabileceğini
unutmayın.
Bu işlevlerin davranışı php.ini içindeki ayarlardan etkilenir.
İsim | Öntanımlı | Değişlik Yeri |
---|---|---|
pdo_mysql.default_socket | "/tmp/mysql.sock" | INI_SYSTEM |
pdo_mysql.debug | NULL | INI_SYSTEM |
Yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.
pdo_mysql.default_socket
string
Sets a Unix domain socket. This value can either be set at compile time if a domain socket is found at configure. This ini setting is Unix only.
pdo_mysql.debug
bool
Enables debugging for PDO_MYSQL. This setting is only available when PDO_MYSQL is compiled against mysqlnd and in PDO debug mode.
To use "PDO::MYSQL_ATTR_USE_BUFFERED_QUERY" you should call
PDO::setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
It will not work when passed into PDO::prepare()
SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. ...
After spending hours trying to track down why we were getting this error on a new server, after the same code ran fine on other servers, we found the problem to be an old MySQL _client_ library running on our web server, and a latest-version MySQL _server_ running on the database server's box.
Upgraded the MySQL client on the web server to the current revision and the problem went away.
> change it by setting default_authentication_plugin=mysql_native_password in my.cnf
This only works in MySQL 8.0. The default_authentication_plugin variable has been removed from 8.4.