سؤال

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

وتحرير: لقد ضاقت مشكلة أسفل إلى أن يتم إرجاع 0 صفوف، ولكن ليس لدي أي فكرة عن السبب كما نفس الاستعلام في بريس يعطي النتيجة الصحيحة

وedit2: إذا أنا التخلص من حلقة في حين ويكون مجرد

    if (!$getRecords->fetch()) {
    printf("<p>ErrorNumber: %d\n", $getRecords->errno);
}

وهذا يظهر أن errno هو 0. لذلك لا السجلات المنال، وليس هناك أي خطأ، ومع ذلك فهو استعلام صالح.

<?php
ini_set('display_errors', '1');
error_reporting(E_ALL);
$pk = $_GET["pk"];
$con = mysqli_connect("localhost", "", "", "");
if (!$con) {
    echo "Can't connect to MySQL Server. Errorcode: %s\n". mysqli_connect_error();
    exit;
}
$con->set_charset("utf8");
echo "test outside loop";
if(1 < 2) {
    echo "test inside loop";
    $query1 = 'SELECT ARTICLE_NO FROM AUCTIONS WHERE ARTICLE_NO = ?';
    if ($getRecords = $con->prepare($query1)) {
echo "inside second loop";
        $getRecords->bind_param("i", $pk);
echo "test after bind param";
        $getRecords->execute();
echo "test after bind execute";
        $getRecords->bind_result($ARTICLE_NO);
echo "test after bind result";
        while ($getRecords->fetch()) {
            echo "test inside while";
            echo "<h1>".$ARTICLE_NO."</h1>";
        }
    }
}

وتحرير:

وحاولت مع هذا الرمز:

<?php
$mysqli = new mysqli("localhost", "", "", "");
$pk = $_GET["pk"];
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}
/* prepare statement */
if ($stmt = $mysqli->prepare("SELECT ARTICLE_NAME, WATCH FROM AUCTIONS WHERE ARTICLE_NO = ? LIMIT 5")) {
    $stmt->bind_param("i", $pk);
    $stmt->execute();
    /* bind variables to prepared statement */
    $stmt->bind_result($col1, $col2);
    /* fetch values */
    while ($stmt->fetch()) {
        printf("%s %s\n", $col1, $col2);
    }
    /* close statement */
    $stmt->close();
}
/* close connection */
$mysqli->close();
?>

وهذا يعمل بدون $ PK، إذا كنت يسلب المعلمات أنه يعمل بشكل جيد. وهي ليست مشكلة في الحصول على PK عبر GET، لأنه إذا أنا تعيين $ PK = 1؛ بدلا من ذلك لا يزال فشل. 1 هو ARTICLE_NO صالحة، وARTICLE_NAME SELECT، WATCH من المزادات العلنية حيث ARTICLE_NO = 1 LIMIT 5 يعمل بشكل جيد في phmyadmin.

وتحرير: كانت المشكلة التي mysqli لا يمكن التعامل مع BIGINT، وأنا الآن باستخدام ك كسلسلة وأنه يعمل بشكل جيد

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

المحلول

وتحقق قيمة:

$getRecords->num_rows

والتي ينبغي أن تساعد في الكشف عن ما إذا كان SELECT في وقت سابق هو في الواقع يعود أي بيانات

وأنت قد تحتاج إلى إضافة أيضا:

$getRecords->store_result()

أولا للتأكد من أنك قمت الاستعلام كله انتهت قبل أن تسأل عن عدد الصفوف في مجموعة النتائج.

وأيضا - تأكد من يلقي $pk إلى عدد صحيح! فمن الممكن أن قيمة يتم تمريرها في هو الحصول على المهترئ.

نصائح أخرى

ولست متأكدا إذا قمت بتعديل هذا الرمز، ولكن لا يبدو أن اختيار قاعدة البيانات التي تريد الاتصال به هناك.

استخدم mysqli_select_db (...) لأنه إذا هذه هي المشكلة.

وتحرير: يبدو أيضا مثل كنت تستخدم الأحرف الكبيرة للعمود، اسم الجدول الخ

واحصل على حساسية قضية حق، فإنه يمكن أن كنت افتراض حالة عدم الحساسية لأنها تعمل من سطر الأوامر. وبقدر ما أعرف السائق mysqlI في PHP لحالة حساسة حول أسماء الأعمدة على الأقل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top