অপরিজ্ঞাত পদ্ধতিতে mysqli_stmt :: get_result এ কল করুন


113

আমার কোডটি এখানে:

include 'conn.php';
$conn = new Connection();
$query = 'SELECT EmailVerified, Blocked FROM users WHERE Email = ? AND SLA = ? AND `Password` = ?';
$stmt = $conn->mysqli->prepare($query);
$stmt->bind_param('sss', $_POST['EmailID'], $_POST['SLA'], $_POST['Password']);
$stmt->execute();
$result = $stmt->get_result();

আমি সর্বশেষ লাইনে ত্রুটিটি পেয়েছি: অপরিজ্ঞাত পদ্ধতিতে কল করুন mysqli_stmt :: get_result ()

সংযোগের জন্য কোডটি এখানে রয়েছে:

define('SERVER', 'localhost');
define('USER', 'root');
define('PASS', 'xxxx');
define('DB', 'xxxx');
class Connection{
    /**
     * @var Resource 
     */
    var $mysqli = null;

    function __construct(){
        try{
            if(!$this->mysqli){
                $this->mysqli = new MySQLi(SERVER, USER, PASS, DB);
                if(!$this->mysqli)
                    throw new Exception('Could not create connection using MySQLi', 'NO_CONNECTION');
            }
        }
        catch(Exception $ex){
            echo "ERROR: ".$e->getMessage();
        }
    }
}

আমি যদি এই লাইনটি লিখি:

if(!stmt) echo 'Statement prepared'; else echo 'Statement NOT prepared';

এটি 'বিবৃতি প্রস্তুত নয়' মুদ্রণ করে । আমি যদি আইডিই প্রতিস্থাপনের মাধ্যমে সরাসরি ক্যোয়ারি চালাই? মান সঙ্গে চিহ্ন, এটি সূক্ষ্ম কাজ করে। অনুগ্রহ করে নোট করুন $ সংযোগ বস্তু প্রকল্পের অন্যান্য প্রশ্নের ক্ষেত্রে দুর্দান্ত কাজ করে।

কোন সাহায্য দয়া করে .......


আমার মনে হয় তুমি ভুলে গেছ $stmt = $conn->mysqli->stmt_init();?
4:56 এ প্রিয়

$_POST['EmailID'], $_POST['SLA'], $_POST['Password']পোস্টের পদ্ধতি সহ এইচটিএমএল ফর্মটি ব্যবহার করে এই ভেরিয়েবলগুলি সঠিকভাবে জমা দেওয়া হয়েছে কিনা তা দয়া করে পরীক্ষা করে দেখুন
আজ্রিয়াল

@ আজরিয়াল: ভেরিয়েবলগুলি সঠিকভাবে পোস্ট করা হচ্ছে। আমি তাদের মুদ্রণ_আর ($ _ পোস্ট) ব্যবহার করে পরীক্ষা করেছি।
কুমার কুশ

@ ফ্যাভোরেট্টি: আমি $ stmt = $ conn-> mysqli-> stmt_init () ব্যবহার করার চেষ্টা করেছি ; । এখনও ভাগ্য নেই।
কুমার কুশ

একটি জিনিস আমি উল্লেখ করতে চাই যে আমি অনুরূপ কোড ব্যবহার করেছি অন্য জায়গাগুলি এবং তারা ভাল কাজ করে।
কুমার কুশ

উত্তর:


146

এই পদ্ধতির জন্য দয়া করে ব্যবহারকারীর নোটগুলি পড়ুন:

http://php.net/manual/en/mysqli-stmt.get-result.php

এটির জন্য মাইএসকিএলএনডি ড্রাইভার দরকার ... এটি যদি আপনার ওয়েবস্পেসে ইনস্টল না করা হয় তবে আপনাকে বিআইএআরইআরসিআরএলটি এবং ফেটের সাথে কাজ করতে হবে!

https://secure.php.net/manual/en/mysqli-stmt.bind-result.php

https://secure.php.net/manual/en/mysqli-stmt.fetch.php


4
অনেক ধন্যবাদ. কাজ করেছে। আমি uncommented এক্সটেনশন = php_mysqli_mysqlnd.dll মধ্যে php.ini ; এবং অ্যাপাচি ২.২ এবং মাইএসকিউএল পরিষেবাগুলি পুনরায় চালু করে। আমি কি লাইন এক্সটেনশন = php_mysqli_libmysql.dll লম্বা করা উচিত ? অন্য পৃষ্ঠা অনুসারে, mysqlnd libmysql এর চেয়ে দ্রুত। এছাড়াও, আমি কি সর্বাধিক জনপ্রিয় হোস্টিং পরিষেবা সরবরাহকারীগুলিতে মাইএসকিএলএন্ড ইনস্টল করা আশা করতে পারি?
কুমার কুশ

1
stmt_init () কেবলমাত্র একটি প্রক্রিয়াগত প্রস্তুত বিবৃতিতে প্রয়োজন। সুতরাং আপনি এটি প্রয়োজন নেই! দেখুন: লিঙ্কটি যেমন লিবমিস্কেল : জানেন না। এবং আমি mysqlnd.dll স্থাপনের জন্য হোস্টিং সরবরাহকারীদের উপর নির্ভর করব না ... আরও ভাল কিছু চেষ্টা করার চেষ্টা করুন!
বেকায়

2
দ্রষ্টব্য: mysqli_stmt::get_result()কেবলমাত্র পিএইচপি v5.3.0 বা তত উপরে উপলব্ধ।
র‌্যাপটার

4
@ ব্যাবে আপনি সবেমাত্র আমাকে একটি নতুন ল্যাপটপ এবং একটি নতুন উইন্ডো সংরক্ষণ করেছেন। যদি +10 পাওয়া যেত তবে আমি আপনাকে দিয়েছি
জেমস কুশিং

1
@ kush.impetus, আপনি কোথায় ডাউনলোড করবেন php_mysqli_mysqlnd.dll? আমি কেবল php_mysqli.dllআমার extফোল্ডারে থাকতাম ।
পেসারিয়ার

51

তাই আপনি যদি মাইএসকিউএল দেশীয় ড্রাইভার (mysqlnd) চালক পাওয়া যায় না, সেইজন্য এবং ব্যবহার করছে bind_result এবং আনা পরিবর্তে get_result , কোড হয়ে:

include 'conn.php';
$conn = new Connection();
$query = 'SELECT EmailVerified, Blocked FROM users WHERE Email = ? AND SLA = ? AND `Password` = ?';
$stmt = $conn->mysqli->prepare($query);
$stmt->bind_param('sss', $_POST['EmailID'], $_POST['SLA'], $_POST['Password']);
$stmt->execute();
$stmt->bind_result($EmailVerified, $Blocked);
while ($stmt->fetch())
{
   /* Use $EmailVerified and $Blocked */
}
$stmt->close();
$conn->mysqli->close();

m stmt-> bind_result আমার সময় সংরক্ষণ করা হয়েছে। যখন get_result পাওয়া না যায় এটি একটি দুর্দান্ত সমাধান।
জাফার

2
প্রশ্ন: ভেরিয়েবলটি কোথা থেকে আসে?
রোটিমি

@ আকিন্টুন্ডে 700: $EmailVerfiedকল করে তৈরি করা হয়েছে bind_result()
অ্যাব্রাকাডেভার

"অব্যক্ত ত্রুটি: অপরিজ্ঞাত পদ্ধতিতে কল করুন mysqli_stmt :: bind_results ()" কোডটি ব্যবহার করে ত্রুটি
শয়তানের স্বপ্ন

আমার কাছে যদি "টেবিল_নাম থেকে নির্বাচন করুন *" এর মতো স্কেল কোয়েরি থাকে তবে বাইন্ড_রেসাল্ট () এর ভিতরে কীভাবে ঘোষণা করবেন। * অপারেটর
ইন্দিরজিৎ

46

আপনার সিস্টেমে মাইএসকিএলএনডি ড্রাইভারটি অনুপস্থিত!

আপনি যদি (ডেবিয়ান / উবুন্টু ভিত্তিক) সার্ভারে নতুন প্যাকেজ ইনস্টল করতে সক্ষম হন তবে ড্রাইভারটি ইনস্টল করুন:

sudo apt-get install php5-mysqlnd

এবং তারপরে আপনার ওয়েব সার্ভারটি পুনরায় চালু করুন:

sudo /etc/init.d/apache2 restart

39

তাদের বিকল্পের সন্ধানকারীদের জন্য $result = $stmt->get_result()আমি এই ফাংশনটি তৈরি করেছি যা আপনাকে $result->fetch_assoc()তবে স্টিমটি অবজেক্টটি সরাসরি নকল করতে দেয় :

function fetchAssocStatement($stmt)
{
    if($stmt->num_rows>0)
    {
        $result = array();
        $md = $stmt->result_metadata();
        $params = array();
        while($field = $md->fetch_field()) {
            $params[] = &$result[$field->name];
        }
        call_user_func_array(array($stmt, 'bind_result'), $params);
        if($stmt->fetch())
            return $result;
    }

    return null;
}

যেহেতু আপনি দেখতে পাচ্ছেন এটি একটি অ্যারে তৈরি করে এবং এটি সারি ডেটা সহ নিয়ে আসে, যেহেতু এটি $stmt->fetch()অভ্যন্তরীণভাবে ব্যবহার করে, আপনি যেমন কল করেছিলেন ঠিক তেমনভাবেই আপনি এটি কল করতে পারেন mysqli_result::fetch_assoc(কেবল নিশ্চিত হয়ে নিন যে $stmtঅবজেক্টটি উন্মুক্ত এবং ফলাফল সংরক্ষণ করা হয়েছে):

//mysqliConnection is your mysqli connection object
if($stmt = $mysqli_connection->prepare($query))
{
    $stmt->execute();
    $stmt->store_result();

    while($assoc_array = fetchAssocStatement($stmt))
    {
        //do your magic
    }

    $stmt->close();
}

এটি এখানে সবচেয়ে সহজ ড্রপ-ইন প্রতিস্থাপন উত্তর। দুর্দান্ত কাজ করেছেন - ধন্যবাদ!
অ্যালেক্স কোলেম্যান

আমাকে অনেক সময় বাঁচিয়েছে!
জাহাজিল

3
যদি $statement->store_result();ফাংশনটি কল করার আগে প্রয়োজন হয় তবে কেন এটি কেবল ফাংশনে অন্তর্ভুক্ত করবেন না?
উন্মাদতাবনাবুন

ধন্যবাদ.
সবেমাত্র

20

পিএইচপি সংস্করণ 7.2 আমি শুধু ব্যবহার করা nd_mysqli পরিবর্তে mysqli এবং এটি প্রত্যাশার মতো কাজ করেছে।

এটিকে গডাড্ডি হোস্টিং সার্ভারে সক্ষম করার পদক্ষেপ-

  1. সিপ্যানেলে লগইন করুন।
  2. "নির্বাচন করুন পিএইচপি সংস্করণ" ক্লিক করুন
  3. সর্বশেষ কনফিগারেশনের স্ন্যাপশট উপলব্ধ হিসাবে আনচেক "mysqli" এবং সক্ষম "nd_mysqli"

এখানে চিত্র বর্ণনা লিখুন


2
থ্যাঙ্ক ইউ, আমি পাগল হয়ে যাচ্ছিলাম!
উসায়ী ইকবাল

1
হা, এই আমার সময় বাঁচায়! ধন্যবাদ ব্রাহ!
নুরুল হুদা

1
মহান! সিপানেলের জন্য নিখুঁত উত্তর
রশিদ

1
তোমাকে অনেক ধন্যবাদ!! আপনি আমাকে
বাঁচাবেন

এই উত্তরটি শীর্ষে থাকা উচিত
habষভ গুসাইন

10

আমি জানি এটির ইতিমধ্যে উত্তর দেওয়া হয়েছিল প্রকৃত সমস্যাটি কী, তবে আমি একটি সাধারণ কাজের প্রস্তাব দিতে চাই।

আমি get_results () পদ্ধতিটি ব্যবহার করতে চেয়েছিলাম তবে আমার চালক নেই, এবং আমি যে কোনও জায়গায় এটিকে যুক্ত করতে পারি না। সুতরাং, আমি ফোন করার আগে

$stmt->bind_results($var1,$var2,$var3,$var4...etc);

আমি একটি ফাঁকা অ্যারে তৈরি করেছি এবং তারপরে ফলাফলগুলি কী হিসাবে অ্যারে হিসাবে আবদ্ধ করব:

$result = array();
$stmt->bind_results($result['var1'],$result['var2'],$result['var3'],$result['var4']...etc);

যাতে ফলাফলগুলি সহজেই পদ্ধতিগুলিতে পাস হতে পারে বা আরও ব্যবহারের জন্য কোনও বস্তুর কাছে ফেলে দেওয়া যেতে পারে।

আশা করি এটি যে কেউ অনুরূপ কিছু করতে চাইছে তাদের সহায়তা করবে।


7

আমি আমার সার্ভারে এই একই ত্রুটিটি পেয়ে যাচ্ছিলাম - পিএইচপি 7.0 মাইএসকিএলএন্ড সহ ইতিমধ্যে এক্সটেনশন সক্ষম হয়েছে।

সমাধান আমার জন্য ছিল (ধন্যবাদ এই পৃষ্ঠার ) নির্বাচন মুক্ত করতে ছিল mysqli এক্সটেনশন নির্বাচন nd_mysqli পরিবর্তে।

এনবি - আপনি নিজের সিপ্যানেলে এক্সটেনশান নির্বাচককে অ্যাক্সেস করতে সক্ষম হতে পারেন। (আমি পিএইচপি সংস্করণ নির্বাচন করুন বিকল্পের মাধ্যমে খনিতে অ্যাক্সেস করি ))


এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। অন্য সম্পূর্ণ পদ্ধতি ব্যবহার করার জন্য আপনার সম্পূর্ণ স্ক্রিপ্ট সম্পাদনা করার চেয়ে এক্সটেনশন সক্ষম করা আরও ভাল better ওহ এবং এটি আমার জন্য কাজ করেছে :)
আরবিয়ানমায়েন

আমারও একই সমস্যা ছিল। আসলে, পিএইচপি এর session_start()ফাংশন ব্যবহার করে আমাকে অস্তিত্বের মানের মতো করে তুলেছে। তারপর আমি সংস্করণে আপগ্রেড 7.2পিএইচপি ও সম্প্রসারণ পরিবর্তিত mysqliকরতে nd_mysqli (স্থির)। তবে, আমার দুটি প্রশ্ন আছে, দুজনের মধ্যে পার্থক্য কী? এবং যদি সেই এক্সটেনশনটি ব্যবহারের ক্ষেত্রে সুরক্ষার কোনও ফাঁক থাকে?
jecorrales

6

আমি বুঝতে পেরেছি যে এই প্রশ্নটিতে কোনও নতুন ক্রিয়াকলাপ হওয়ার পরে অনেক দিন হয়েছে। তবে, অন্যান্য পোস্টাররা যেমন মন্তব্য করেছেন - get_result()এখন কেবলমাত্র মাইএসকিউএল নেটিভ ড্রাইভার (মাইএসকিএলএনডি) ইনস্টল করে পিএইচপিতে পাওয়া যায় এবং কিছু ক্ষেত্রে মাইএসকিএলএনডি ইনস্টল করা সম্ভব বা কাম্য নয়। সুতরাং, আমি ভেবেছিলাম যে এই উত্তরটি get_result()ব্যবহার না করে কীভাবে প্রস্তাবিত কার্যকারিতাটি দেয় সে সম্পর্কিত তথ্যের সাথে পোস্ট করা সহায়ক get_result()

get_result()fetch_array()ফলাফল / সেট লুপের সাথে প্রায়শই একত্রিত হয় এবং ফলাফলের প্রতিটি সারি থেকে মানগুলিকে সংখ্যাসূচক-সূচকযুক্ত বা সহযোগী অ্যারেতে সংরক্ষণ করে। উদাহরণস্বরূপ, নীচের কোডটি ফলাফল সেট মাধ্যমে লুপ করতে get_result () ব্যবহার করে, প্রতিটি সারি থেকে সংখ্যাসূচক-সূচকযুক্ত $ ডেটা [] অ্যারেতে সংরক্ষণ করে:

$c=1000;
$sql="select account_id, username from accounts where account_id<?";
$stmt = $mysqli->prepare($sql);                 
$stmt->bind_param('i', $c);                                             
$stmt->execute();
$result = $stmt->get_result();       
while($data = $result->fetch_array(MYSQLI_NUM)) {
   print $data[0] . ', ' . $data[1] . "<BR>\n"; 
}

তবে, যদি get_result()উপলভ্য না থাকে (কারণ mysqlnd ইনস্টল করা নেই), তবে এটি ব্যবহার না করে ফলাফলের প্রতিটি সারি থেকে কীভাবে মানগুলি সংরক্ষণ করতে হবে তা সমস্যার দিকে নিয়ে যায় get_result()। অথবা, উত্তরাধিকার কোডটি কীভাবে মাইগ্রেট get_result()করা যায় যা এটি ছাড়াই চলতে ব্যবহার করে (যেমন ব্যবহার করেbind_result() পরিবর্তে করে) - যতটা সম্ভব সামান্যতম কোডকে প্রভাবিত করার সময়।

দেখা যাচ্ছে যে প্রতিটি সারি থেকে একটি সংখ্যা-সূচকযুক্ত অ্যারেতে মানগুলি সংরক্ষণ করে ব্যবহার করা এত সোজা-ফরোয়ার্ড নয় bind_result()bind_result()স্কেলার ভেরিয়েবলগুলির একটি তালিকা প্রত্যাশা করে (অ্যারে নয়)। সুতরাং, ফলাফলের প্রতিটি সারি থেকে একটি অ্যারেতে সেট করা মানগুলি সংরক্ষণ করতে এটি কিছু করতে লাগে।

অবশ্যই কোডটি সহজেই নিম্নলিখিত হিসাবে পরিবর্তন করা যেতে পারে:

$c=1000;
$sql="select account_id, username from accounts where account_id<?";
$stmt = $mysqli->prepare($sql);                 
$stmt->bind_param('i', $c);                                             
$stmt->execute();
$stmt->bind_result($data[0], $data[1]);
while ($stmt->fetch()) {
   print $data[0] . ', ' . $data[1] . "<BR>\n"; 
}

তবে, এর জন্য আমাদের স্বতন্ত্রভাবে ডাকে $ ডেটা [0], $ ডেটা [1], ইত্যাদি তালিকাভুক্ত করা প্রয়োজন bind_result(), যা আদর্শ নয়। আমরা এমন একটি সমাধান চাই যা আমাদের স্পষ্টভাবে $ ডেটা [0], $ তথ্য [1], ... $ ডেটা [এন -1] তালিকাভুক্ত করতে হবে না (যেখানে এন নির্বাচনী বিবৃতিতে ক্ষেত্রের সংখ্যা) কল এ bind_results()। যদি আমরা এমন কোনও উত্তরাধিকার অ্যাপ্লিকেশন স্থানান্তর করি যেটিতে প্রচুর পরিমাণে ক্যোয়ারী রয়েছে এবং প্রতিটি ক্যোয়ারিতে আলাদা আলাদা ক্ষেত্রের ক্ষেত্র থাকতে পারেselect তবে আমরা যদি উপরেরটির মতো সমাধানটি ব্যবহার করি তবে মাইগ্রেশনটি খুব শ্রমনির্ভর এবং ত্রুটির প্রবণ হবে will ।

আদর্শভাবে, আমরা 'ড্রপ-ইন রিপ্লেসমেন্ট' কোডটির স্নিপেট চাই - get_result()ফাংশনটি যুক্ত লাইনটি এবং পরবর্তী লাইনে ()) লুপটি প্রতিস্থাপন করতে । এর আগে () লুপের অভ্যন্তরে থাকা রেখাগুলি - এর আগে লাইনগুলির কোনও বা তারপরে কোনও লাইনকে প্রভাবিত না করে প্রতিস্থাপন কোডটির পরিবর্তিত কোডের মতো একই ফাংশন থাকা উচিত। আদর্শভাবে আমরা চাই প্রতিস্থাপন কোডটি যথাসম্ভব কমপ্যাক্ট হওয়া উচিত, এবং আমরা selectকোয়েরির ধারাটিতে ক্ষেত্রের সংখ্যার ভিত্তিতে প্রতিস্থাপন কোডটি টেলর করতে চাই না ।

ইন্টারনেটে অনুসন্ধান করে, আমি বেশ কয়েকটি সমাধান পেয়েছি যা ব্যবহার bind_param()করে call_user_func_array() (উদাহরণস্বরূপ, গতিময়ভাবে mysqli_stmt পরামিতিগুলি আবদ্ধ করুন এবং তারপরে ফলাফল (পিএইচপি) বাঁধাই করুন ), তবে বেশিরভাগ সমাধান যেগুলি আমি পেয়েছি ফলাফলগুলি ফলস্বরূপ একটি সংঘবদ্ধ অ্যারেতে সংরক্ষণ করা হয় তা নয় not একটি সংখ্যায়-সূচকযুক্ত অ্যারে, এবং এর মধ্যে অনেকগুলি সমাধান আমার পছন্দ মতো কমপ্যাক্ট ছিল না এবং / অথবা 'ড্রপ-ইন প্রতিস্থাপন' হিসাবে উপযুক্ত ছিল না। তবে, আমি যে উদাহরণগুলি পেয়েছি সেগুলি থেকে, আমি এই সমাধানটি একসাথে বাঁধতে সক্ষম হয়েছি, যা বিলের সাথে খাপ খায়:

$c=1000;
$sql="select account_id, username from accounts where account_id<?";
$stmt = $mysqli->prepare($sql);                 
$stmt->bind_param('i', $c);                                             
$stmt->execute();
$data=array();
for ($i=0;$i<$mysqli->field_count;$i++) { 
    $var = $i;
    $$var = null; 
    $data[$var] = &$$var; 
}
call_user_func_array(array($stmt,'bind_result'), $data);
while ($stmt->fetch()) {
   print $data[0] . ', ' . $data[1] . "<BR>\n"; 
}

অবশ্যই, () লুপটিকে আরও কমপ্যাক্ট করার জন্য একটি লাইনে ভেঙে ফেলা যেতে পারে।

আমি আশা করি এটি ব্যবহার করে সমাধানের সন্ধানকারী যে কোনও ব্যক্তিকে সহায়তা করবে bind_result() একটি সংখ্যাসূচকভাবে-সূচীবদ্ধ অ্যারের মধ্যে এবং / অথবা ব্যবহার স্থানান্তরণের উত্তরাধিকার কোড একটি উপায় খুঁজছেন প্রতিটি সারির থেকে মানগুলি সঞ্চয় করতে get_result()। মন্তব্য স্বাগত।


Yupp। 3 বছর আগে পিডিওতে স্থানান্তরিত। যাইহোক, ধন্যবাদ.
কুমার কুশ

5

এখানে আমার বিকল্প। এটি অবজেক্ট-ওরিয়েন্টেড এবং মাইএসকিএল / মাইএসকিলি জিনিসগুলির মতো।

class MMySqliStmt{
    private $stmt;
    private $row;

    public function __construct($stmt){
        $this->stmt = $stmt;
        $md = $stmt->result_metadata();
        $params = array();
        while($field = $md->fetch_field()) {
            $params[] = &$this->row[$field->name];
        }
        call_user_func_array(array($stmt, 'bind_result'), $params) or die('Sql Error');
    }

    public function fetch_array(){
        if($this->stmt->fetch()){
            $result = array();
            foreach($this->row as $k => $v){
                $result[$k] = $v;
            }
            return $result;
        }else{
            return false;
        }
    }

    public function free(){
        $this->stmt->close();
    }
}

ব্যবহার:

$stmt = $conn->prepare($str);
//...bind_param... and so on
if(!$stmt->execute())die('Mysql Query(Execute) Error : '.$str);
$result = new MMySqliStmt($stmt);
while($row = $result->fetch_array()){
    array_push($arr, $row);
    //for example, use $row['id']
}
$result->free();
//for example, use the $arr

2

আমি দুটি সহজ ফাংশন লিখেছি যা একই কার্যকারিতা দেয় $stmt->get_result(); তবে তাদের মাইএসকিএলএনডি ড্রাইভারের প্রয়োজন হয় না।

আপনি কেবল প্রতিস্থাপন করুন

$result = $stmt->get_result(); সঙ্গে $fields = bindAll($stmt);

এবং

$row= $stmt->get_result(); সঙ্গে $row = fetchRowAssoc($stmt, $fields);

(ফিরে আসা সারিগুলির সংখ্যা পেতে আপনি ব্যবহার করতে পারেন $stmt->num_rows))

আপনি শুধু আছে এই দুটি ফাংশন স্থান আমি লিখেছি কোথাও আপনার পিএইচপি স্ক্রিপ্টের মধ্যে । (উদাহরণস্বরূপ নীচে ডানদিকে)

function bindAll($stmt) {
    $meta = $stmt->result_metadata();
    $fields = array();
    $fieldRefs = array();
    while ($field = $meta->fetch_field())
    {
        $fields[$field->name] = "";
        $fieldRefs[] = &$fields[$field->name];
    }

    call_user_func_array(array($stmt, 'bind_result'), $fieldRefs);
    $stmt->store_result();
    //var_dump($fields);
    return $fields;
}

function fetchRowAssoc($stmt, &$fields) {
    if ($stmt->fetch()) {
        return $fields;
    }
    return false;
}

এটি কীভাবে কাজ করে :

আমার কোড $stmt->result_metadata();ফাংশনটি ব্যবহার করে কতগুলি এবং কোন ক্ষেত্রগুলি ফিরে আসে তা নির্ধারণ করে এবং তারপরে প্রাপ্ত ফলাফলগুলি প্রাক-তৈরি রেফারেন্সগুলিতে স্বয়ংক্রিয়ভাবে আবদ্ধ করে। একটি যাদুমন্ত্র মত কাজ করে!


কেন এটি নিম্নচালিত হয়েছিল ধারণা নেই। এটি খুব ভালভাবে কাজ করে - আমি এটি অনেক প্রকল্পে ব্যবহার করেছি।
স্টিফান এস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.