mysql_fetch_array () / mysql_fetch_assoc () / mysql_fetch_row () / mysql_num_rows etc… පරාමිති 1 සම්පතක් වනු ඇතැයි අපේක්ෂා කරයි


962

මම MySQL වගුවකින් දත්ත තෝරා ගැනීමට උත්සාහ කරමි, නමුත් මට පහත දෝෂ පණිවිඩ වලින් එකක් ලැබේ:

mysql_fetch_array () 1 පරාමිතිය සම්පතක් වනු ඇතැයි අපේක්ෂා කරයි

මෙය මගේ කේතයයි:

$username = $_POST['username'];
$password = $_POST['password'];

$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

while($row = mysql_fetch_array($result)) {
    echo $row['FirstName'];
}

15
:: QUERY හෝ die (mysql_error ()) භාවිතා කර ඔබට වඩාත් ප්‍රයෝජනවත් eroor msg ලබා ගත හැකිය;
nik

123
අනිවාර්ය සටහනද: ඔබේ කේතය SQL එන්නත් කිරීමට නැඹුරු වේ . ඔබ පරිශීලක ආදානය වලංගු කර / හෝ ගැලවිය යුතුය. බලන්න mysql_real_escape_string. පරිශීලක දත්ත කිසි විටෙකත් විශ්වාස නොකරන්න.
ෆීලික්ස් ක්ලින්ග්

7
ඇත්ත වශයෙන්ම, OP හි කේතය MySQL සේවාදායකයේ සින්ටැක්ස් දෝෂයක් ඇති කරයි, නමුත් අවම වශයෙන් එය SQL ඉන්ජෙක්ෂන් වලට ගොදුරු නොවේ, මන්ද තනි උපුටා දැක්වීම්වල විචල්‍ය අන්තර් මැදිහත්වීමක් නොමැති බැවිනි.
szgal

4
El ෆීලික්ස්ක්ලිං මෙය ඉතා පැරණි බවත්, ඒ අවස්ථාවේ දී වඩාත් නිවැරදි විය හැකි බවත් මට වැටහී ඇත, නමුත් ඔබේ අදහස දැන් එක් ආකාරයකින් භයානක ලෙස වැරදිය mysql_real_escape_string. එය තවමත් ප්‍රහාර ගණනාවකට ගොදුරු විය හැකිය. (නැත, ඔබ එය කිසි විටෙකත් පරිපූර්ණ යැයි කීවේ නැත, නමුත් ඔබ ඇඟවූයේ එය අවශ්‍ය එකම විසඳුම බවය) දැන් ඇති හොඳම විසඳුම PDO ය, මා දන්නා පරිදි.
අරමුදල් මොනිකාගේ නඩුව

2
ගා. MySQLi සහ PDO ඇතුළත් කිරීම සඳහා මෙම ප්‍රශ්නය දිගු කිරීම නරක අදහසකි. ඔවුන් සෑම කෙනෙකුටම තරමක් වෙනස් සින්ටැක්ස් සහ දෝෂ පණිවිඩ ඇති අතර ඔවුන්ට ඔවුන්ගේම ප්‍රශ්න තිබිය හැකිය. සෑම දෙයක්ම කොටස් තුනකින් යුත් යෝධ කොටස් තුනකට සම්බන්ධ කිරීමෙන් මෙය ගූගල් කළ නොහැකි වන අතර මෙහි පැමිණෙන පුද්ගලයින්ට අදාළ නොවන අන්තර්ගතයන් හරහා ඔවුන්ට අවශ්‍ය දේ ලබා ගැනීමට බල කරයි. එය පහත දැක්වෙන පිළිතුරු බොහොමයක් අවලංගු කර ඇති අතර, අප සාමාන්‍යයෙන් අදාළ වන ප්‍රමිතීන්ට අනුව මෙම ප්‍රශ්නය "ඕනෑවට වඩා පුළුල්" කරයි. එය අවුල් ජාලයක්, මගේ මතය අනුව, නමුත් දැන් එය නිවැරදි කිරීමට ප්‍රමාද වැඩිය.
මාර්ක් අමරි

Answers:


668

Mysql_ * සහ mysqli දිගුව යන දෙකම falseඅදාළ විමසුම් කාර්යයන් / ක්‍රම වලින් නැවත පැමිණෙන විවිධ හේතු නිසා විමසුමක් අසමත් විය හැකිය . ඔබ එම දෝෂ තත්වය පරීක්ෂා කර ඒ අනුව හැසිරවිය යුතුය.

mysql_ * දිගුව :

සටහන මෙම mysql_ කාර්යයන් නොසලකා හරිනු ලැබේ හා PHP අනුවාදය 7 ඉවත් කර ඇත.

$resultඑය ලබා දීමට පෙර පරීක්ෂා කරන්න mysql_fetch_array. falseවිමසුම අසාර්ථක වූ නිසා බව ඔබට පෙනී යනු ඇත. mysql_queryහැකි ප්‍රතිලාභ අගයන් සහ ඒවා සමඟ කටයුතු කරන්නේ කෙසේද යන්න පිළිබඳ යෝජනා සඳහා ලේඛනය බලන්න .

$username = mysql_real_escape_string($_POST['username']);
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '$username'");

if($result === FALSE) { 
    die(mysql_error()); // TODO: better error handling
}

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

mysqli දිගු
කිරීමේ ක්‍රියා පටිපාටි විලාසය :

$username = mysqli_real_escape_string($mysqli, $_POST['username']);
$result = mysqli_query($mysqli, "SELECT * FROM Users WHERE UserName LIKE '$username'");

// mysqli_query returns false if something went wrong with the query
if($result === FALSE) { 
    yourErrorHandler(mysqli_error($mysqli));
}
else {
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
        ...

oo-style :

$username = $mysqli->escape_string($_POST['username']);
$result = $mysqli->query("SELECT * FROM Users WHERE UserName LIKE '$username'");

if($result === FALSE) { 
    yourErrorHandler($mysqli->error); // or $mysqli->error_list
}
else {
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
      ...

සූදානම් කළ ප්‍රකාශයක් භාවිතා කරමින්:

$stmt = $mysqli->prepare('SELECT * FROM Users WHERE UserName LIKE ?');
if ( !$stmt ) {
    yourErrorHandler($mysqli->error); // or $mysqli->error_list
}
else if ( !$stmt->bind_param('s', $_POST['username']) ) {
    yourErrorHandler($stmt->error); // or $stmt->error_list
}
else if ( !$stmt->execute() ) {
    yourErrorHandler($stmt->error); // or $stmt->error_list
}
else {
    $result = $stmt->get_result();
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
      ...

මෙම උදාහරණ මගින් නිරූපණය කළ යුත්තේ කළ යුතු දේ (දෝෂ හැසිරවීම) මිස එය කරන්නේ කෙසේද යන්න නොවේ. or dieHTML ප්‍රතිදානය කිරීමේදී නිෂ්පාදන කේතය භාවිතා නොකළ යුතුය , එසේ නොමැති නම් එය (අවම වශයෙන්) අවලංගු HTML ජනනය කරනු ඇත. එසේම, දත්ත සමුදායේ දෝෂ පණිවිඩ පරිපාලක නොවන පරිශීලකයින්ට දර්ශනය නොවිය යුතුය, මන්ද එය ඕනෑවට වඩා තොරතුරු හෙළි කරයි .


9
හරි, නමුත් විමසුම අසමත් වුවහොත් ඩයි () භාවිතා කිරීම ටිකක් වැඩිය.
වනකුබෝයි

28
මම OP සඳහා සම්පූර්ණ දෝෂ හැසිරවීමේ යාන්ත්‍රණයක් සැලසුම් කිරීමට යන නමුත් එය මගේ පිළිතුරේ සීමාවෙන් ඔබ්බට විය හැකි යැයි තීරණය කළෙමි.
එඩ්වඩ් ඩේල්

@ scompt.com ඔව් එය තවත් පිළිතුරු කිහිපයකින් ආවරණය වේ. ඉහළ දෘශ්‍යතාව පිළිබඳ ප්‍රශ්නයක පිළිගත් පිළිතුර මෙය බැවින් අනාගතයේ දී දෝෂ නිවැරදිව හසු කර ගන්නේ කෙසේද යන්න පිළිබඳ (විශිෂ්ට) උපදෙස් වලට අමතරව, එය (IMHO) නිශ්චිත ප්‍රශ්නයට පිළිතුරු දිය යුතුය (එනම් මෙම නඩුවේ දෝෂයක් ඇතිවීමට හේතුව පැහැදිලි කරන්න ).
සැප්තැම්බර්

2
ඒ වෙනුවට if($result === FALSE)ඔබට භාවිතා කළ හැකිය if(! $result). මම වැරදියි නම් මාව නිවැරදි කරන්න
anestv

1
mysql_query (): mysql දිගුව අවලංගු කර ඇති අතර එය අනාගතයේදී ඉවත් කරනු ඇත: mysqli භාවිතා කරන්න
ග්‍රෙග්

165

ඔබගේ විමසුමේ දෝෂයක් ඇති විට එය අසාර්ථක වීමට හේතු වූ විට මෙම දෝෂ පණිවිඩය දර්ශනය වේ. භාවිතා කරන විට එය ප්‍රකාශ වේ:

  • mysql_fetch_array/mysqli_fetch_array()
  • mysql_fetch_assoc()/mysqli_fetch_assoc()
  • mysql_num_rows()/mysqli_num_rows()

සටහන : මෙම දෝෂය කුමක්ද නොවන කිසිදු පේළි ඔබගේ විමසුමට පීඩාවට නම් පෙනී යයි. අවලංගු සින්ටැක්ස් සහිත විමසුමක් පමණක් මෙම දෝෂය ජනනය කරනු ඇත.

දෝශ නිරාකරණ පියවර

  • සියලු දෝෂ පෙන්වීම සඳහා ඔබේ සංවර්ධන සේවාදායකය වින්‍යාස කර ඇති බවට වග බලා ගන්න. මෙය ඔබගේ ලිපිගොනු මුදුනේ හෝ වින්‍යාස ගොනුවේ තැබීමෙන් ඔබට මෙය කළ හැකිය : error_reporting(-1);. ඔබට සින්ටැක්ස් දෝෂ තිබේ නම් මෙය ඔබට පෙන්වා දෙනු ඇත.

  • භාවිතා කරන්න mysql_error(). mysql_error()ඔබගේ විමසුම සිදු කිරීමේදී MySQL හි ඇති වූ දෝෂයන් වාර්තා කරයි.

    නියැදි භාවිතය:

    mysql_connect($host, $username, $password) or die("cannot connect"); 
    mysql_select_db($db_name) or die("cannot select DB");
    
    $sql = "SELECT * FROM table_name";
    $result = mysql_query($sql);
    
    if (false === $result) {
        echo mysql_error();
    }
    
  • ඔබේ විමසුම MySQL විධාන රේඛාවෙන් හෝ phpMyAdmin වැනි මෙවලමකින් ධාවනය කරන්න . ඔබේ විමසුමේ සින්ටැක්ස් දෝෂයක් තිබේ නම් මෙය කුමක්දැයි ඔබට කියනු ඇත.

  • ඔබගේ උපුටා දැක්වීම් නිවැරදි බවට වග බලා ගන්න. විමසුම වටා ඇති උපුටා දැක්වීමක් හෝ අගයක් විමසුමක් අසමත් වීමට හේතු විය හැක.

  • ඔබ ඔබේ සාරධර්මවලින් ගැලවී යන බවට වග බලා ගන්න. ඔබගේ විමසුමේ උපුටා දැක්වීම් විමසුමක් අසාර්ථක වීමට හේතු විය හැක (තවද ඔබ SQL එන්නත් සඳහා විවෘතව තබයි). mysql_real_escape_string()ඔබගේ ආදානයෙන් ගැලවීමට භාවිතා කරන්න.

  • ඔබ මිශ්ර නොවන බවට වග බලා ගන්න mysqli_*හා mysql_*කාර්යයන්. ඒවා එකම දෙයක් නොවන අතර එකට භාවිතා කළ නොහැක. (ඔබ එක් හෝ වෙනත් සැරයටියක් තෝරා ගැනීමට යන්නේ නම් mysqli_*. ඒ සඳහා පහත බලන්න.)

වෙනත් ඉඟි

mysql_*නව කේත සඳහා කාර්යයන් භාවිතා නොකළ යුතුය. ඒවා තවදුරටත් නඩත්තු නොකරන අතර ප්‍රජාව ක්ෂය කිරීමේ ක්‍රියාවලිය ආරම්භ කර ඇත . ඒ වෙනුවට ඔබ සූදානම් කළ ප්‍රකාශ ගැන ඉගෙන ගෙන PDO හෝ MySQLi භාවිතා කළ යුතුය . ඔබට තීරණය කළ නොහැකි නම්, මෙම ලිපිය තෝරා ගැනීමට උපකාරී වේ. ඔබ ඉගෙන ගැනීමට කැමති නම්, මෙන්න හොඳ PDO නිබන්ධනය .


1
අද මෙම ප්‍රශ්නය ලබා දී ඇති විට stackoverflow.com/q/43804651/1415724 සහ වෙනත් සමාන ප්‍රශ්න මෑතකදී; "mysql_query()mysqli_query($connection) පිළිතුර / යනාදිය සමඟ විමසුම ක්‍රියාත්මක නොකිරීම නිසා ද එම දෝෂය ඇතිවිය හැකිය" වැනි යමක් අඩංගු කිරීම සඳහා ඔබේ පිළිතුර යාවත්කාලීන කිරීම වටී යැයි මම සිතමි . ; සිතුවිලි? මෙම ප්රශ්න හා පිළිතුරු වල වෙනත් කිසිදු පිළිතුරක් මේ ගැන සඳහන් නොකරයි.
ෆන්ක් හතළිස් නයිනර්

111

මෙහි දෝෂයක් ඇති වූයේ තනි උපුටා දැක්වීම් ( ') භාවිතා කිරීම හේතුවෙනි . ඔබේ විමසුම මේ ආකාරයෙන් තැබිය හැකිය:

mysql_query("
SELECT * FROM Users 
WHERE UserName 
LIKE '".mysql_real_escape_string ($username)."'
");

එය mysql_real_escape_stringSQL එන්නත් කිරීම වැළැක්වීම සඳහා භාවිතා කරයි. PHP (PHP 5.5.0 සහ ඊට පසු) යාවත්කාලීන කළ අනුවාදය සඳහා අපි MySQLi හෝ PDO_MYSQL දිගුව භාවිතා කළ යුතු නමුත් පැරණි අනුවාද mysql_real_escape_stringසඳහා උපක්‍රමය කරනු ඇත.


5
විමසුම් නූලට විචල්‍යය ඇතුළත් කරනවා වෙනුවට නූල් සම්මුතිය සමඟ ශබ්දය එකතු කරන්නේ ඇයි?
මැටියෝ රීවා

1
At මැටියෝ රීවා ඔව්, නමුත් මම සිතුවේ මෙය විචල්යයන් නූල් වලින් වෙන් කිරීමට වඩා පිරිසිදු ක්‍රමයක් බවයි. :)
nik

60

ලෙස scompt.com පැහැදිලි , විමසුම අසමත් විය හැකිය. විමසුමේ දෝෂය හෝ නිවැරදි ප්‍රති result ලය ලබා ගැනීමට මෙම කේතය භාවිතා කරන්න:

$username = $_POST['username'];
$password = $_POST['password'];

$result = mysql_query("
SELECT * FROM Users 
WHERE UserName LIKE '".mysql_real_escape_string($username)."'
");

if($result)
{
    while($row = mysql_fetch_array($result))
    {
        echo $row['FirstName'];
    }
} else {
    echo 'Invalid query: ' . mysql_error() . "\n";
    echo 'Whole query: ' . $query; 
}

වැඩි විස්තර සඳහා ප්‍රලේඛනයmysql_query() බලන්න .

සත්‍ය දෝෂය වූයේ විචල්‍යය $usernameවිග්‍රහ නොකිරීමට තනි උපුටා දැක්වීම් ය . නමුත් mysql_real_escape_string($username)SQL එන්නත් කිරීමෙන් වැළකී සිටීමට ඔබ සැබවින්ම භාවිතා කළ යුතුය .


52

උපුටා දැක්වීම් වටා තබන්න $username. සංඛ්‍යාත්මක අගයන්ට ප්‍රතිවිරුද්ධව නූල් අගයන් උපුටා දැක්වීම්වල ඇතුළත් කළ යුතුය.

$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '$username'");

එසේම, LIKEඔබ ආදේශක කාඩ්පත් භාවිතා නොකරන්නේ නම් කොන්දේසිය භාවිතා කිරීමේ තේරුමක් නැත: ඔබට =ඒ වෙනුවට නිශ්චිත ගැලපුම් භාවිතයක් අවශ්‍ය නම් LIKE.


2
$ පරිශීලක නාමය නම් කුමක් කළ යුතුද: "'; ඩ්‍රොප් ටේබල්;" ? සූදානම් කළ ප්‍රකාශ සහ බැඳී ඇති අගයන් භාවිතා කිරීමේ වාසිය එයයි, අසන්නා රඳවා ගැනීමට කැමති යැයි මම සිතමි.
HoldOffHunger

42

කරුණාකර තෝරාගත් දත්ත සමුදාය සමහර විට දත්ත සමුදාය තෝරා නොගත් නිසා පරීක්ෂා කරන්න

චෙක් පත

mysql_select_db('database name ')or DIE('Database name is not available!');

MySQL විමසීමට පෙර ඊළඟ පියවර වෙත යන්න

$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

f($result === FALSE) {
    die(mysql_error());

40

ඔබේ කේතය මේ වගේ දෙයක් විය යුතුයි

$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM Users WHERE UserName LIKE '$username'";
echo $query;
$result = mysql_query($query);

if($result === FALSE) {
    die(mysql_error("error message for the user")); 
}

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

එය අවසන් වූ පසු, විමසුම තිරය මත මුද්‍රණය වේ. ඔබේ සේවාදායකයේ මෙම විමසුම උත්සාහ කර එය අපේක්ෂිත ප්‍රති .ල ලබා දෙයිදැයි බලන්න. බොහෝ විට දෝෂය විමසුමේ ඇත. කේතයේ ඉතිරි කොටස නිවැරදි ය.


3
මෙම කේතය භාවිතා නොකරන්න. එය SQL එන්නත් කිරීමේ ප්‍රහාර සඳහා පුළුල් ලෙස විවෘතය.
බ්‍රැඩ්

34
$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

ඔබ තනි උපුටා දැක්වීම් භාවිතා කරමින් නූල නිර්වචනය කරන අතර PHP තනි උපුටා දැක්වීම් වෙන් කරන ලද නූල් විග්‍රහ නොකරයි. විචල්ය අන්තර් මැදිහත්වීමක් ලබා ගැනීම සඳහා ඔබට ද්විත්ව උපුටා දැක්වීම් හෝ නූල් සම්මුතිය (හෝ එහි සංයෝජනයක්) භාවිතා කිරීමට අවශ්‍ය වනු ඇත. වැඩි විස්තර සඳහා http://php.net/manual/en/language.types.string.php බලන්න .

MySQL_query වලංගු ප්‍රති result ල සම්පතක් ලබා දී ඇත්දැයි ඔබ පරික්ෂා කළ යුතුය, එසේ නොමැතිනම් ලබා ගැනීම_ *, අංක_රෝස් යනාදිය ප්‍රති result ලයක් ලෙස ක්‍රියා නොකරනු ඇත. IE:

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

if( $result === FALSE ) {
   trigger_error('Query failed returning error: '. mysql_error(),E_USER_ERROR);
} else {
   while( $row = mysql_fetch_array($result) ) {
      echo $row['username'];
   }
}

වැඩි විස්තර සඳහා http://us.php.net/manual/en/function.mysql-query.php .


2
ඔබ උපුටා දැක්වීම් එකතු කළත් මෙම කේතය භාවිතා නොකරන්න. එය SQL එන්නත් කිරීමේ ප්‍රහාර සඳහා පුළුල් ලෙස විවෘතය.
බ්‍රැඩ්

33

මෙම විමසුම ක්‍රියාත්මක විය යුතුය:

$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'");
while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

ගැටළුව තනි උපුටා දැක්වීම් වන අතර එමඟින් ඔබේ විමසුම අසමත් වී අසත්‍යය ලබා දෙන අතර ඔබේ WHILE පුඩුවට ක්‍රියාත්මක කළ නොහැක. % භාවිතා කිරීමෙන් ඔබේ වචන අඩංගු ඕනෑම ප්‍රති results ලයකට ගැලපීමට ඉඩ සලසයි (සොම් ටෙක්ස්ට්- $ පරිශීලක නාමය-සමටෙක්ස්ට් වැනි).

මෙය ඔබගේ ප්‍රශ්නයට පිළිතුරක් පමණක් වන අතර, ඔබ අනෙක් පෝස්ට් වල සඳහන් දේවල් ක්‍රියාත්මක කළ යුතුය: දෝෂ හැසිරවීම, ගැලවීමේ නූල් භාවිතා කරන්න (පරිශීලකයින්ට ක්ෂේත්‍රයට ඕනෑම දෙයක් ටයිප් කළ හැකිය, එය අත්තනෝමතික කේතයක් නොවන බවට ඔබ සහතික විය යුතුය), PDO වෙනුවට mysql_connect එය දැන් ක්ෂය වී ඇත.


27
$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'") or die(mysql_error());

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

සමහර විට විමසුම යටපත් කිරීම @mysql_query(your query);


3
මෙම කේතය භාවිතා නොකරන්න. එය SQL එන්නත් කිරීමේ ප්‍රහාර සඳහා පුළුල් ලෙස විවෘතය.
බ්‍රැඩ්

27

ඔබ මෙහි සෑම දෙයක්ම උත්සාහ කර එය ක්‍රියාත්මක නොවන්නේ නම්, ඔබට ඔබේ MySQL දත්ත සමුදාය පරීක්ෂා කිරීමට අවශ්‍ය විය හැකිය. පතල ස්වීඩන් එකතුවකට සකසා ඇත. පසුව මම එය වෙනස් කළ utf8_general_ciඅතර සියල්ල ගියර් එකට ක්ලික් කළා.


25
$query = "SELECT Name,Mobile,Website,Rating FROM grand_table order by 4";

while( $data = mysql_fetch_array($query))
{
    echo("<tr><td>$data[0]</td><td>$data[1]</td><td>$data[2]</td><td>$data[3]</td></tr>");      
}

WHERE විමසුමක් භාවිතා කරනවා වෙනුවට, ඔබට මෙම ORDER BY විමසුම භාවිතා කළ හැකිය. විමසුමක් භාවිතා කිරීම සඳහා මෙය වඩා හොඳය.

මම මෙම විමසුම සිදු කර ඇති අතර පරාමිති හෝ බූලියන් වැනි දෝෂ නොමැත.


htmlspecialchars()HTML සන්දර්භය තුළ අත්තනෝමතික දත්ත භාවිතා කිරීමේදී භාවිතා කිරීමට මතක තබා ගන්න . එසේ නොමැතිනම්, දත්තවල වෙන් කර ඇති අක්ෂර භාවිතා කරන විට වලංගු HTML නිර්මාණය කිරීමේ අවදානමක් ඇත.
බ්‍රැඩ්

25

මෙය උත්සාහ කරන්න, එය ක්‍රියාකාරී විය යුතුය, එසේ නොමැතිනම් ඔබේ ගැටලුව නියම කිරීම සඳහා දෝෂය මුද්‍රණය කළ යුතුය

$username = $_POST['username'];
$password = $_POST['password'];

$sql = "SELECT * from Users WHERE UserName LIKE '$username'";
$result = mysql_query($sql,$con);

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

8
1) SQL එන්නත් කිරීම සඳහා පුළුල් ලෙස විවෘතව ඇත, 2) OP නඩුවේ දෝෂයට හේතු වන දෝෂ හැසිරවීම ඇතුළත් නොවේ.
රැවටීම

+1. cedeceze ඔව් එය පුළුල් ලෙස විවෘතයි. නමුත් තව දුරටත් එසේ නොවන්නේ OP හෝ පිළිගත් පිළිතුරු සපයන්නාගේ කේතය ;-) තවද එය OP කේතයේ දෝෂ හැසිරවීමේ lack නතාවයට හේතුව දෝෂයක් නොවේ ... එය දෝෂය වන අතර මෙම පිළිතුර අවම වශයෙන් එය විසඳීමට උත්සාහ කරයි (තනි එකක් තැබීමෙන් LIKEප්‍රකාශනයේ වචනාර්ථයෙන් නූල් වටා උපුටා දැක්වීම් ).
සැප්තැම්බර්

1
+1 කරුණාකර LIKE සහ '$ පරිශීලක නාමය' අතර ඉඩක් එක් කරන්න, SQL එන්නත් කිරීම හැර සෙසු ඒවා හොඳ බව පෙනේ. LIKE ක්‍රියාකරු පරිශීලක නාමය වෙනුවට = භාවිතා නොකරන්නේ ඇයි
asim-ishaq

21

හේතු දෙකක් තිබිය හැකිය:

  1. MySQL_query ශ්‍රිතය ඇමතීමට පෙර ඔබ දත්ත සමුදායට සම්බන්ධතාවය විවෘත කර තිබේද? මම ඔබේ කේතයේ එය දකින්නේ නැහැ. විමසුම කිරීමට පෙර mysql_connect භාවිතා කරන්න. බලන්නphp.net/manual/en/function.mysql-connect.php

  2. විචල්ය $ පරිශීලක නාමය තනි උපුටා දැක්වීමේ නූලක් තුළ භාවිතා වේ, එබැවින් විමසුම තුළ එහි වටිනාකම තක්සේරු නොකෙරේ. විමසුම අනිවාර්යයෙන්ම අසමත් වනු ඇත.

තෙවනුව, විමසුමේ ව්‍යුහය SQL එන්නත් කිරීමට නැඹුරු වේ . මෙම ආරක්ෂක තර්ජනය වළක්වා ගැනීම සඳහා ඔබට සූදානම් කළ ප්‍රකාශ භාවිතා කළ හැකිය.


20

පහත කේතය උත්සාහ කරන්න. එය හොඳින් ක්‍රියාත්මක විය හැකිය.

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName ='$username'");

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

4
මෙම කේතය SQL එන්නත් කිරීමට යටත් වන අතර එය භාවිතා නොකළ යුතුය.
බ්‍රැඩ්

15

ඔබේ වෙත යන්න config.php. මටත් ඒ වගේ ප්‍රශ්නයක් තිබුණා. පරිශීලක නාමය සහ මුරපදය සත්‍යාපනය කරන්න, එසේම SQL තේරීම වින්‍යාසයට සමාන නමක් වේ.


15

ක්ෂය කළ mysql_ * ශ්‍රිතය භාවිතා නොකරන්න (php 5.5 හි දක්වා ඇති අගය php 7 හි ඉවත් කරනු ලැබේ). ඔබට මෙය mysqli හෝ pdo සමඟ කළ හැකිය

මෙන්න සම්පූර්ණ තෝරාගත් විමසුම

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        // code here 
    }
} else {
    echo "0 results";
}
$conn->close();
?>

ඔබගේ පෝස්ටුව අවලංගු විමසුමක් සහ නොගැලපෙන දෝෂ වාර්තා කිරීමක් වන ප්‍රශ්නය මගින් විසඳන ලද ගැටළු සමඟ කටයුතු නොකරයි. මෙම ලිපිය මාතෘකාවෙන් බැහැරයි.
පෝල් ස්පීගල්

14
<?php
    $username = $_POST['username'];
    $password = $_POST['password'];
    $result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '".$username."'");

    while($row = mysql_fetch_array($result))
    {
        echo $row['FirstName'];
    }
?>

අද්විතීය පරිශීලක නාමයක් ඇති පරිශීලකයෙකු සිටී නම්, ඒ සඳහා ඔබට "=" භාවිතා කළ හැකිය. කැමති වීමට අවශ්‍ය නැත.

ඔබේ විමසුම වනුයේ:

mysql_query("SELECT * FROM Users WHERE UserName ='".$username."'");

3
මෙම කේතය SQL එන්නත් කිරීම සඳහා පුළුල්ව විවෘතව ඇති අතර එය භාවිතා නොකළ යුතුය.
බ්‍රැඩ්

N අනුජ්ගාර්ග් මෙම කේතය සෘජු ආදානය ගෙන එය විමසුමට සමපාත කරයි. usernameයමෙකුට තමන්ගේම SQL පෝස්ට් දත්ත සඳහා ලිවිය හැකි අතර එය ක්‍රියාත්මක වේ.
බ්‍රැඩ්

SQL එන්නත් කිරීමෙන් කේතය වැළැක්වීමට භාවිතා කළ යුත්තේ කුමක්ද?
අනුජ් ගාග්

14

MySQL විමසුමට පෙර සම්බන්ධතා නූල් විචල්‍යයක් ඇතුළත් කරන්න. උදාහරණයක් ලෙස, $conntමෙම කේතයේ:

$results = mysql_query($connt, "SELECT * FROM users");

1
මෙය ප්‍රශ්නයේ ඇති ගැටළු වලට විසඳුම් ලබා නොදේ. එය ද වැරදියි, තවත් දෝෂයක් මතු කරයි.
පෝල් ස්පීගල්

12

ඔබට ලැබෙන ඕනෑම වේලාවක ...

"අවවාදයයි: mysqli_fetch_object () 1 පරාමිතිය mysqli_result, බූලියන් ලබා දෙනු ඇතැයි අපේක්ෂා කරයි"

... ඔබගේ විමසුම සමඟ ගැටළුවක් ඇති නිසා විය හැකිය. මෙම prepare()හෝ query()නැවත වරක් FALSE(අ බූලීය), නමුත් මේ ලිපිය තුළ වර්ගීය අසාර්ථක පණිවිඩය බොහෝ ඉඟි මාර්ගයෙහි ඔබ අත්හැර නැත. ඔබගේ විමසුමේ වැරැද්ද කුමක්දැයි ඔබ සොයා ගන්නේ කෙසේද? ඔබ අහන්න !

පළමුවෙන්ම, දෝෂ වාර්තා කිරීම සක්‍රිය කර ඇති බවට වග බලා ගන්න: ඔබේ ආරම්භක <?phpටැගය අවසන් වූ වහාම මෙම පේළි දෙක ඔබගේ ගොනුවේ (ය) ඉහළට එක් කරන්න :

error_reporting(E_ALL);
ini_set('display_errors', 1);

ඔබගේ දෝෂ වාර්තා කිරීම php.ini හි සකසා ඇත්නම් ඔබට මේ ගැන කරදර විය යුතු නැත. ඔබ වැරදි ලෙස හැසිරවීමට වග බලා ගන්න සහ ඔබේ පරිශීලකයින්ට කිසිදු ගැටලුවක සැබෑ හේතුව කිසි විටෙකත් හෙළි නොකරන්න. මහජනයාට සැබෑ හේතුව හෙළි කිරීම ඔබේ වෙබ් අඩවි සහ සේවාදායකයන්ට හානි කිරීමට කැමති අයට රන් කැටයම් ආරාධනයක් විය හැකිය. ඔබට බ්‍රව්සරයට දෝෂ යැවීමට අවශ්‍ය නැතිනම් ඔබට සැමවිටම ඔබේ වෙබ් සේවාදායකයේ දෝෂ සටහන් නිරීක්ෂණය කළ හැකිය. ලොග් ස්ථාන සේවාදායකයේ සිට සේවාදායකයට වෙනස් වේ. උබුන්ටු හි දෝෂ ලොගය සාමාන්‍යයෙන් පිහිටා ඇත /var/log/apache2/error.log. ඔබ ලිනක්ස් පරිසරයක දෝෂ ල logs ු-සටහන් පරීක්ෂා කරන්නේ නම්, ඔබට tail -f /path/to/logතත්‍ය කාලීනව සිදුවන දෝෂ දැකීමට කොන්සෝල කවුළුවක භාවිතා කළ හැකිය .... නැතහොත් ඔබ ඒවා සාදන විට.

සම්මත දෝෂ වාර්තාකරණයෙන් ඔබ ඉවත් වූ පසු, ඔබේ දත්ත සමුදා සම්බන්ධතාවය සහ විමසීම් වල දෝෂ පරීක්ෂා කිරීම එකතු කිරීමෙන් සිදුවෙමින් පවතින ගැටලු පිළිබඳ වැඩි විස්තර ලබා දෙනු ඇත. තීරුවේ නම වැරදියි මෙම උදාහරණය දෙස බලන්න. පළමුව, සාමාන්‍ය මාරාන්තික දෝෂ පණිවිඩය ලබා දෙන කේතය:

$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
$query = $mysqli->prepare($sql)); // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();

දෝෂය සාමාන්‍ය වන අතර සිදුවෙමින් පවතින දේ විසඳීමට ඔබට එතරම් ප්‍රයෝජනවත් නොවේ.

තවත් කේත පේළි කිහිපයක් සමඟ ඔබට ඉතා සවිස්තරාත්මක තොරතුරු ලබා ගත හැකි අතර එමඟින් ගැටළුව වහාම විසඳා ගත හැකිය . prepare()සත්‍යතාවය සඳහා ප්‍රකාශය පරීක්ෂා කරන්න, එය හොඳ නම් ඔබට බැඳීම සහ ක්‍රියාත්මක කිරීම ඉදිරියට යා හැකිය.

$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
if($query = $mysqli->prepare($sql)) { // assuming $mysqli is the connection
    $query->bind_param('s', $definition);
    $query->execute();
    // any additional code you need would go here.
} else {
    $error = $mysqli->errno . ' ' . $mysqli->error; // 1054 Unknown column 'foo' in 'field list'
    // handle error
}

යමක් වැරදියි නම් ඔබට දෝෂ පණිවිඩයක් කෙළ ගසා එය කෙලින්ම ගැටලුවට යොමු කරයි. මෙම අවස්ථාවේ fooදී, වගුවේ තීරුවක් නොමැත , ගැටළුව විසඳීම සුළුපටු ය.

ඔබ තෝරා ගන්නේ නම්, ඔබට මෙම පරීක්ෂාව ශ්‍රිතයකට හෝ පන්තියකට ඇතුළත් කළ හැකි අතර කලින් සඳහන් කළ පරිදි දෝෂ මනාව හැසිරවීමෙන් එය දිගු කළ හැකිය.


2
ඔබ ලියන්නේ කෙසේද "ඔබ වැරදි ලෙස හැසිරවීමට වග බලා ගන්න සහ ඔබේ පරිශීලකයින්ට කිසිදු ගැටලුවක සැබෑ හේතුව කිසි විටෙකත් හෙළි නොකරන්න." සහ echo $error;එක් තනතුරක?
පෝල් ස්පීගල්

ඉහළට ඔසවා තැබීමට ස්තූතියි a පෝල්ස්පීගල්. මම පිළිතුර ලිවීමට හෝ නැවත බැලීමට ටික කලක් ගතවී ඇති අතර, මම එහි දෝංකාරය අතහැර දමා ඇති බව මග හැරී ඇත.
ජේ බ්ලැන්චාර්ඩ්

11
<?php
      $username = $_POST['username'];
       $password = $_POST['password'];

     $result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '".mysql_real_escape_string($username)."'")or die(mysql_error());
while($row=mysql_fetch_array($result))
  {
 echo $row['FirstName'];
 }
 ?>

11

මේක උත්සාහ කරන්න

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysqli_query('SELECT * FROM Users WHERE UserName LIKE $username');

if($result){
while($row = mysqli_fetch_array($result))
{
    echo $row['FirstName'];
}
}

4
@panjehra mysql_ * දැන් අවලංගු කර ඇති අතර එය php 7 වෙතින් ඉවත් කෙරේ. ඒ වෙනුවට mysqli_ * භාවිතා කරන්න
MKD

9

පළමුව, දත්ත සමුදායට ඔබගේ සම්බන්ධතාවය පරීක්ෂා කරන්න. එය සාර්ථකව සම්බන්ධ වී තිබේද නැද්ද?

එය සිදු කර ඇත්නම්, ඊට පසු මම මෙම කේතය ලියා ඇති අතර එය හොඳින් ක්‍රියාත්මක වේ:

if (isset($_GET['q1mrks']) && isset($_GET['marks']) && isset($_GET['qt1'])) {
    $Q1mrks = $_GET['q1mrks'];
    $marks = $_GET['marks'];
    $qt1 = $_GET['qt1'];

    $qtype_qry = mysql_query("
        SELECT *
        FROM s_questiontypes
        WHERE quetype_id = '$qt1'
    ");
    $row = mysql_fetch_assoc($qtype_qry);
    $qcode = $row['quetype_code'];

    $sq_qry = "
        SELECT *
        FROM s_question
        WHERE quetype_code = '$qcode'
        ORDER BY RAND() LIMIT $Q1mrks
    ";
    $sq_qry = mysql_query("
        SELECT *
        FROM s_question
        WHERE quetype_code = '$qcode'
        LIMIT $Q1mrks
    ");
    while ($qrow = mysql_fetch_array($sq_qry)) {
        $qm = $qrow['marks'] . "<br />";
        $total += $qm . "<br />";
    }
    echo $total . "/" . $marks;
}

2
මෙම කේතය භාවිතා නොකරන්න. එය SQL එන්නත් කිරීමේ ප්‍රහාර සඳහා පුළුල් ලෙස විවෘතය.
බ්‍රැඩ්

9

ඔබේ විමසුම ක්‍රියාත්මක කිරීමට පෙර db_close () භාවිතා කිරීමෙන් ඔබ දත්ත සමුදාය වසා නොදමන බවට වග බලා ගන්න:

ඔබ ස්ක්‍රිප්ට් එකක බහුවිධ විමසුම් භාවිතා කරන්නේ නම්, ඔබ විමසීම් හෝ දත්ත සමුදා සම්බන්ධතා ඇති වෙනත් පිටු ඇතුළත් කර ඇත්නම්, එවිට ඔබ ඕනෑම ස්ථානයක db_close () භාවිතා කරන අතර එය ඔබේ දත්ත සමුදා සම්බන්ධතාවය වසා දැමිය හැකි බැවින් ඔබ සහතික වන්න ඔබගේ ස්ක්‍රිප්ට් වල මෙම වැරැද්ද නොකිරීම.


7

පරීක්ෂා කිරීමේදී ඔබට MySQL දෝෂයක් නොපෙන්වයි නම්, ඔබ ඔබේ දත්ත සමුදා වගුව නිසියාකාරව නිර්මාණය කළ බවට වග බලා ගන්න. මෙය මට සිදු විය. ඕනෑම අනවශ්‍ය කොමාවන් හෝ මිල ගණන් සොයන්න.


6

පළමුව ඔබේ සම්බන්ධතාවය පරීක්ෂා කරන්න.

දත්ත සමුදායෙන් නිශ්චිත අගය ලබා ගැනීමට ඔබට අවශ්‍ය නම් ඔබ ලිවිය යුත්තේ:

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName =`$usernam`");

නැතහොත් ඔබට LIKEවටිනාකමේ වර්ගය ලබා ගැනීමට අවශ්‍ය නම් ඔබ ලිවිය යුත්තේ:

$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'");

3
මෙම කේතය SQL එන්නත් කිරීම සඳහා පුළුල්ව විවෘතව ඇති අතර එය භාවිතා නොකළ යුතුය.
බ්‍රැඩ්

5

ලබා $resultගැනීමේ අරාව ක්‍රියාත්මක කිරීමට පෙර, තෙත් කිරීම එසේ අසමත් වී ඇත්දැයි ඔබට පරීක්ෂා කළ හැකිය

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');
if(!$result)
{
     echo "error executing query: "+mysql_error(); 
}else{
       while($row = mysql_fetch_array($result))
       {
         echo $row['FirstName'];
       }
}

3
මෙම කේතය භාවිතා නොකරන්න. එය SQL එන්නත් කිරීමේ ප්‍රහාර සඳහා පුළුල් ලෙස විවෘතය.
බ්‍රැඩ්

නමුත් කේතය ක්‍රියාත්මක වන්නේ නම්, කේතය සංස්කරණය කිරීම වෙනුවට කේතය සංස්කරණය කර අවශ්‍ය පෙරහන් ඇතුළත් කළ යුතු යැයි මට හැඟේ.
user28864

පෙරහන් සරල ලෙස භාවිතා කිරීමෙන් මෙම කේතයේ ඇති වැරැද්ද නිවැරදි නොවේ. හොඳම විසඳුම වන්නේ PDO හෝ ඊට සමාන සකස් කළ / පරාමිතිගත විමසුම් භාවිතා කිරීමයි. නිවැරදි පිළිතුර දැනටමත් මෙහි පළ කර ඇති බැවින් එය නිවැරදි කිරීමේ කිසිදු කරුණක් මට නොපෙනේ. ඉතා මැනවින්, මෙම පිළිතුර මකා දැමෙනු ඇත. කෙසේ වෙතත්, ඔබේ පිළිතුර නිවැරදි කිරීමට ඔබව සාදරයෙන් පිළිගනිමු. එය නිවැරදි නම් මම සතුටින් එය ප්‍රකාශ කරමි.
බ්‍රැඩ්

හොඳයි, ඔබට පිළිතුර සලකා බැලීම වටින්නේ නැතැයි ඔබට හැඟේ නම් ඔබට ඉදිරියට ගොස් එය කියවිය හැකිය. කෙසේ වෙතත්, මෙම ප්‍රජාවේ සමස්ත කාරණය දැනුම බෙදාහදා ගැනීම සහ දායක වීම යැයි මම සිතුවෙමි. මිනිසුන් පෙන්වීම සහ කල් දැමීම වෙනුවට ඔබට බෙදා ගැනීමට යමක් තිබේ නම්.
පරිශීලක 28864

2
ඔබ නිවැරදියි, මෙම ප්‍රජාවේ සමස්ත කරුණ වන්නේ දැනුම බෙදා ගැනීමයි. මගේ පහත් අගය සමඟ පැහැදිලි කිරීමක් එකතු කළේ එබැවිනි, ඔබේ පෙරහන් යෝජනාව ප්‍රමාණවත් නොවීමට හේතුව තවදුරටත් පැහැදිලි කළේය. ඉහත කේතය අනාරක්ෂිත බව ඔබේ පිළිතුර සොයා ගන්නා වෙනත් ඕනෑම අයෙකු සමඟ ඔබව දැනුවත් කිරීමට මම බොහෝ කැමැත්තෙමි. නරක කේතයක් පවත්වා ගෙන යනවාට වඩා නිවැරදි ක්‍රම ඉගෙන ගැනීම සෑම කෙනෙකුටම වඩා හොඳය. මට ඔබේ පිළිතුර මකා දැමිය නොහැක. මමද එසේ නොකරමි. ඔබ එසේ කිරීමට තෝරා ගන්නේ නම් එය ඔබට භාරයි.
බ්‍රැඩ්

3

සාමාන්‍යයෙන් දෝෂයක් සිදුවන්නේ ඔබේ දත්ත සමුදායේ අසාර්ථකත්වය නිසා, ඔබේ දත්ත සමුදාය සම්බන්ධ කිරීමට හෝ දත්ත සමුදා ගොනුව ඇතුළත් කිරීමට වග බලා ගන්න.

include_once(db_connetc.php');

හෝ

// Create a connection
$connection = mysql_connect("localhost", "root", "") or die(mysql_error());

//Select database
mysql_select_db("db_name", $connection) or die(mysql_error());

$employee_query = "SELECT * FROM employee WHERE `id` ='".$_POST['id']."'";

$employee_data = mysql_query($employee_query);

if (mysql_num_rows($employee_data) > 0) {

    while ($row = mysql_fetch_array($employee_data)){
        echo $row['emp_name'];
    } // end of while loop
} // end of if
  • හොඳම පුරුද්ද වන්නේ විමසුම sqlyog හි ධාවනය කර ඔබේ පිටු කේතයට පිටපත් කිරීමයි.
  • ඔබේ විමසුම සෑම විටම විචල්‍යයක ගබඩා කර එම විචල්‍යය ප්‍රතිරාවය කරන්න. ඉන්පසු වෙත යන්න mysql_query($query_variable);.

2
1) මම මෙහි කිසිදු පිළිතුරක් ඉහළට හෝ පහළට ඡන්දය දී ඇත්දැයි ඔබ දන්නේ නැත. 2) මගේ පළමු අදහස් දැක්වීමේදී මා පැහැදිලි කළ පරිදි; ඔබගේ පිළිතුරෙන් ගැටලුව සඳහන් නොවේ ( බූලියන් mysql_fetch_array වෙත යොමු කර ඇත ) සහ ඔබට සින්ටැක්ස් දෝෂ තිබේ
ෆිල්

2
ඔබගේ කේත උදාහරණ දෙකෙහිම වැරදි උපුටා දැක්වීම් තිබේ. ඔබගේ දෙවන කේත වාරණයට අදාළ වන සින්ටැක්ස් ඉස්මතු කිරීම යමක් වැරදී ඇති බව ලබා දීමකි
ෆිල්

4
මෙම කේතය SQL එන්නත් කිරීමට යටත් වන අතර එය භාවිතා නොකළ යුතුය. Ng එන්ගර්සාර්ඩාරි ඔබ ඔබේ නිෂ්පාදන පද්ධතිවල මෙම කේතය භාවිතා කරන්නේ නම්, ඔබ නිසැකවම කපා කොටා ඇති අතර PDO හෝ ඊට සමාන සකස් කළ / පරාමිතිගත විමසුම් භාවිතා කර මිලදී ගැනීමේ තත්වයට පිළියම් යෙදිය යුතුය. එවැනි අවදානම් සඳහා ස්වයංක්‍රීය පරීක්ෂණ ඇති බොට්ස් තිබේ.
බ්‍රැඩ්

1
NgEngrZardari ඔබේ "කිසිදු දෝෂයක් නොමැත, මම දැනට භාවිතා කරන කේතය මෙහි අලවා ඇත." ඉහත අදහස් දක්වන්න. මා විසින් නිවැරදි කරන ලද විමසුමේ අස්ථානගත වූ උපුටා දැක්වීමක් තිබුණි. එය (PHP) විග්‍රහ කිරීමේ දෝෂයක් ඇති කිරීමට ඉඩ තිබුණි.
ෆන්ක් හතළිස් නයිනර්

2

සාම්ප්‍රදායිකව PHP නරක පුරුදු සහ කේතයේ අසාර්ථකත්වයන් ඉවසා ඇති අතර එමඟින් නිදොස් කිරීම තරමක් අපහසු වේ. මෙම විශේෂිත අවස්ථාවක ප්රශ්නය දෙකම බව ය mysqli හා PDO විමසීමකදී අසාර්ථක වූ විට පෙරනිමියෙන්, ඔබ කියන්න එපා, සාධාරණ නැවත FALSE. (මම depricated ගැන කතා නැහැ mysql ව්යාප්ති. එම සහයෝගය සූදානම් ප්රකාශ මාරුවීම එක්කෝ හේතු anough වේ PDO හෝ mysqli .) එහෙත්, ඔබ හැම විටම විසි කිරීමට PHP හි පෙරනිමි හැසිරීම වෙනස් කළ හැක ව්යතිරේක විමසීමකදී අසමත් විට.

සඳහා PDO භාවිතය:$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

error_reporting(E_ALL);

$pdo = new PDO("mysql:host=localhost;dbname=test", "test","");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$result = $pdo->query('select emal from users');
$data = $result->fetchAll();

මෙය ඔබට පහත දෑ පෙන්වනු ඇත:

මාරාන්තික දෝෂය: 'SQLSTATE [42S22] පණිවිඩය සහිත' PDOException ': තීරුව හමු නොවීය: 1054 E හි' ක්ෂේත්‍ර ලැයිස්තුවේ 'නොදන්නා තීරුව' emal ': 8 htdocs \ test \ mysql_errors \ pdo.php 8 වන පේළියේ

PDOException: SQLSTATE [42S22]: තීරුව හමු නොවීය: 1054 E හි 'ක්ෂේත්‍ර ලැයිස්තුවේ' නොදන්නා තීරුව 'emal': \ htdocs \ test \ mysql_errors \ pdo.php 8 වන පේළියේ

ඔබ දකින පරිදි, එය හරියටම ඔබට කියයි, විමසුමේ වැරැද්ද කුමක්ද සහ එය ඔබේ කේතයේ නිවැරදි කරන්නේ කොතැනද යන්න.

නැතිව $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); ඔබට ලැබෙනු ඇත

මාරාන්තික දෝෂය: E හි බූලියන් මත සියලුම () ලබා ගැනීමේ සාමාජික ශ්‍රිතයක් අමතන්න: \ htdocs \ test \ mysql_errors \ pdo.php 9 වන පේළියේ

සඳහා mysqli භාවිතය:mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

error_reporting(E_ALL);

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'test', '', 'test');

$result = $mysqli->query('select emal from users');
$data = $result->fetch_all();

ඔබට ලැබෙනු ඇත

මාරක දෝෂය: E හි 'ක්ෂේත්‍ර ලැයිස්තුවේ' 'නොදන්නා තීරුව' ඉමාල් 'පණිවිඩය සහිත' mysqli_sql_exception ': E htdocs \ test \ mysql_errors \ mysqli.php 8 වන පේළියේ

mysqli_sql_exception: E හි 'ක්ෂේත්‍ර ලැයිස්තුවේ' නොදන්නා තීරුව 'emal': t htdocs \ test \ mysql_errors \ mysqli.php 8 වන පේළියේ

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);ඔබ නොමැතිව

මාරක දෝෂය: E හි බූලියන් මත fetch_all () ශ්‍රිතයක් අමතන්න: \ htdocs \ test \ mysql_errors \ mysqli.php 10 වන පේළියේ

ඇත්ත වශයෙන්ම, ඔබට MySQL දෝෂයන් අතින් පරීක්ෂා කළ හැකිය. නමුත් මම යතුරු ලියනය කළ සෑම අවස්ථාවකම - හෝ ඊට වඩා නරක - මට දත්ත සමුදාය විමසීමට අවශ්‍ය සෑම අවස්ථාවකම එය කිරීමට සිදුවුවහොත් මට පිස්සු වැටෙනු ඇත.


1

මෙම කේතය උත්සාහ කර එය හොඳින් ක්‍රියාත්මක වේ

පශ්චාත් විචල්‍යය විචල්‍යයට පවරන්න

   $username = $_POST['uname'];

   $password = $_POST['pass'];

  $result = mysql_query('SELECT * FROM userData WHERE UserName LIKE $username');

if(!empty($result)){

    while($row = mysql_fetch_array($result)){
        echo $row['FirstName'];
     }
}

3
මෙම කේතය SQL එන්නත් කිරීමේ ප්‍රහාරයන්ට යටත් වන අතර එය භාවිතා නොකළ යුතුය.
බ්‍රැඩ්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.