سؤال

لدي الرمز التالي:

$link = new PDO("mysql:dbname=$databasename;host=127.0.0.1",$username,$password);
$query = $link->prepare("SELECT * FROM index WHERE sbeid=:idvar");
for($j = 1; $j < count($array); $j++)
{
    if($array[$j][16] == "TRUE" || $array[$j][16] == "FALSE")
    {
        $paramforquery = $array[$j][25];
        $query->bindParam(":idvar",$paramforquery);
        $query->execute();
        $result = $query->fetchAll();
        //do things with the $result
        $query->closeCursor();
    }
    //else if, do stuff
}
$link = null;

$array هي صفيف كبير يتكون من مدخلات من ملف CSV يتم تحميله بنجاح عبر fopen().

مشكلتي هي: الاستعلام لا يعمل. أعرف حقيقة (قم بتشغيل الاستعلام مباشرة على الخادم مع بعض قيم العينة من الملف) أن البيانات موجودة في قاعدة البيانات ، ولكن عندما أكون var_dump ال $resultS في كل مرة for حلقة تعمل ، أحصل على صفيف فارغ.

ما الخطأ الذي افعله؟

تيا.

هل كانت مفيدة؟

المحلول

زيادة الإبلاغ عن الخطأ - النصيحة القياسية.
قم بتعيين وضع الخطأ لكائن PDO إلى errmode_exception - بالكاد يمكنك تفويت خطأ بهذه الطريقة.
استخدم مصحح أخطاء أو أضف بعض إخراج التصحيح إلى البرنامج النصي الخاص بك - تصحيح الأخطاء الحقيقية أفضل.

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);  
$array = foo();
echo '<pre>Debug: |array|=', count($array), '</pre>';

$link = new PDO("mysql:dbname=$databasename;host=127.0.0.1",$username,$password);
$link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  
$query = $link->prepare("SELECT * FROM index WHERE sbeid=:idvar");
$query->bindParam(":idvar", $paramforquery);

foreach($array as $row) {
    echo '<pre>Debug: row[16]='; var_dump($row[16]); echo '</pre>';
    if($row[16] == "TRUE" || $row[16] == "FALSE") {
        $paramforquery = $row[25];
        echo '<pre>Debug: paramforquery='; var_dump($paramforquery); echo '</pre>';
        $query->execute();
        echo '<pre>Debug: rowcount='; var_dump($query->rowCount()); echo '</pre>';
        $result = $query->fetchAll();
        //do things with the $result
        $query->closeCursor();
    }
    //else if, do stuff
}
$link = null;

نصائح أخرى

هل أنت متأكد من أنك تحصل على اتصال؟

try {
    $link = new PDO("mysql:dbname=$databasename;host=127.0.0.1",$username,$password);
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
}

هذا سيحصل على أي استثناءات من محاولة الاتصال. إذا كان هذا يعمل بشكل جيد ، فحاول وضع الاستعلام تحت خط الرابط $ وشاهد ما تم إرجاعه.

إذا كان استعلامك يدويًا ، فسأقول إنه شيء يتعلق بتوصيل DB الخاص بك. تأكد من تشغيل خطأ في الإبلاغ.

إضافي: في استفسارك لديك هذا: idvar؟ يجب ألا تستخدم متغير PHP مثل $ idvar.

لذا

$query = $link->prepare("SELECT * FROM index WHERE sbeid=" . $idvar);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top