Памылка, занадта шмат падлучэнняў да MySQL выкарыстаннем PDO паказаў наш дб імя карыстальніка і пароль?

У нейкі момант раней на ім з'яўляецца там было занадта шмат злучэнняў SQL і наступны быў echo'd экраніровать для каго шукаў:

PHP Fatal error:  Uncaught exception 'PDOException' with message  'SQLSTATE[08004] [1040] Too many connections' in /dir/file.php:21
Stack trace:
#0 /dir/file.php(21): PDO->__construct('mysql:host=loca...', 'the user', 'password')

Як вы можаце бачыць, надрукаванае імя карыстальніка і пароль.

Я пачатковец у PDO форму падлучэння да БД, і я трапіў у яго, таму што людзі казалі мне, што мая рэгулярная форма mysql_connect была небяспечнай. Аднак па змаўчанні, калі mysql_connect калі-небудзь было занадта якіх-небудзь злучэнняў, што <моцны> ніколі надрукаваў імя карыстальніка і пароль на экране.

Якая катастрофа.

Як спыніць PDO рабіць гэта, калі гэта памылка з ў ??

Я выкарыстоўваю:

$dbh = new PDO('mysql:host=localhost;dbname=' . $db, $user, $pass);
3
Я згодны, што гэта праблема, і павінна быць даведзена да каманды PDO. Калі ласка, прагаласуйце за ўтойванне паўнамоцтваў пры няспраўнасці: bugs.php.net/bug.php ? ID = 62184
дададзена аўтар IMB, крыніца
Ok - будзе рабіць. Хоць гэта здаецца дзіўным павінна быць нават неабходна, каб прагаласаваць - яго проста смешна друку па змаўчанні імя карыстальніка і пароль уліковых дадзеных ў паведамленні пра памылку !! І асабліва, калі, па-відаць, па меншай меры, маё разуменне PDO, каб зрабіць больш бяспечны спосаб доступу да базы дадзеных! Супер пацярпець няўдачу.
дададзена аўтар willdanceforfun, крыніца
Вы калі-небудзь здарыцца высветліць гэта?
дададзена аўтар hafichuk, крыніца

2 адказы

PDO не робіць нічога падобнага.

Гэта адбываецца таму, што вы не выконваеце якую-небудзь апрацоўкі выключэнняў, таму апрацоўшчык памылак РНР па змаўчанні быць выкліканы і паказваючы свой стэк выклікаў, у тым ліку аргументаў функцыі.

Звычайна называюць стэкі вельмі добра, так што вы хочаце апрацоўшчык памылак для працы; Вам проста трэба правільна яго выкарыстоўваць.

  • Месца паспрабаваць / ўлоў блокі ў адпаведных месцах вакол кода, які можа кінуць выключэння; па меншай меры, пакласці кетчуп усе паспрабаваць / ўлоў блок вакол верхняга ўзроўню вашага кода, так што нічога не прасочваецца.

PDO дакументацыі, аднак, выразна сказана (у чырвоным акне папярэджання) вялікі рызыка вы бераце ня правільна лавіць выключэння PDO:

<Р> Калі ваша прыкладанне не злавіць выключэнне, кінутае з канструктара PDO, дзеянне па змаўчанні прымаецца ZEND рухавіком спыніць сцэнар і адлюстраваць зваротны след. Гэты зваротны след, хутчэй за ўсё, раскрыць усе дэталі падлучэння да базы дадзеных, уключаючы імя карыстальніка і пароль. Гэта ваша адказнасць, каб злавіць гэта выключэнне, альбо ў відавочным выглядзе (праз вадазборнымі заява) або няяўна з дапамогай set_exception_handler ().

( http://www.php.net/manual/en/pdo.connections. PHP )

3
дададзена
Гэта мае сэнс для больш разумнай версіі сябе. Цяпер, калі я мог бы працаваць НУ, што спроба/ўлоў. дзякуй за паказальнік !!
дададзена аўтар willdanceforfun, крыніца
Гэта таксама мае сэнс :)
дададзена аўтар willdanceforfun, крыніца
@cosmicbdog: Вы пэўна павінны даведацца пра выключэнні, перш чым выкарыстоўваць бібліятэку, якая выкарыстоўвае іх!
дададзена аўтар Lightness Races in Orbit, крыніца

Рэдагаваць php.ini і ўсталяваць

display_errors = 0

Калі ў вас няма доступу да php.ini, то ў верхняй частцы вашага скрыпту (ов), вы павінны дадаць:

ini_set("display_errors", "0");

See http://php.net/manual/en/errorfunc.configuration.php and http://php.net/manual/en/function.error-reporting.php

Гэта спыніць усе памылкі ад таго, якія выводзяцца ў браўзэр. Пераканайцеся, што вы па-ранейшаму рэгістрацыі памылак (з дапамогай налады php.ini).

пастскрыптум Ня адкідаць PDO

2
дададзена
цаню гэта! дзякуй.
дададзена аўтар willdanceforfun, крыніца
Дарэчы гэта ён display_errors = 0 або display_errors = Off?
дададзена аўтар willdanceforfun, крыніца
Колькасць перахопліваць выключэнні.
дададзена аўтар Lightness Races in Orbit, крыніца
Калі адключыць памылкі, вы не ўбачыце, што адбываецца ... (схаваць іх прэч для вытворчасці, хоць)
дададзена аўтар Lightness Races in Orbit, крыніца
@ TomalakGeret'kal я цалкам згодны, але вы ўсё яшчэ хочаце, каб адключыць выснова ў браўзэр ў якасці меры засцярогі.
дададзена аўтар hafichuk, крыніца
альбо будзе працаваць - прытрымлівацца пагаднення ў вашым файле php.ini
дададзена аўтар hafichuk, крыніца