mysql выдает пустое сообщение об ошибке php

-4
   <?php

   if (isset($_COOKIE["username"])) {

$listType = $_POST['listType'];
$uid = $_COOKIE['username'];
$con = mysql_connect('localhost','xxxx','xxxx');
if(!$con)
{
        die("Could not connect: " . mysql_error());
}

$db = mysql_select_db('xxx');

$getUseridquery = mysql_query("SELECT * FROM user WHERE membername='".$uid."'") or die("error1" .mysql_error());
while ($row = mysql_fetch_array($getUseridquery)or die("error11" .mysql_error())) {
    $user_id = $row['uid'];
    typeHandler($listType, $user_id);
}

   } else {
       //something wrong
       return failure;
   }

   function typeHandler($type, $id) {
       if ($type == 'sub') {
        //get the list of subscibers if there any
        $getSubscribe_query = mysql_query("SELECT target_id FROM subscribes WHERE owner_id='" . $id . "'") or die("error2".mysql_error());
           $subArray = mysql_fetch_array($getSubscribe_query);
           $rowcount = mysql_num_rows($getSubscribe_query) or die("error22".mysql_error());
           if ($rowcount > 0) {
            makeSubList($subArray, $id, TRUE);
           } else {
            makeSubList($subArray, $id, FALSE);
           }

       }

       if ($type == '') {

       }

   }

   function makeSubList($iArray, $id, $hasSub) {

if ($hasSub = TRUE) {
    //if user subscribed to others
    $responseArray = array();
    for ($a = 0; $a <= count($iArray); $a++) {
        makeListEntry($iArray[$a], $responseArray);
    }

    //add owner scene
    makeListEntry($id, $responseArray);
    return $responseArray;
} else {
    //just add ower to the list
    $responseArray = array();
    makeListEntry($id, $responseArray);
    return $responseArray;
}

   }

   function makeListEntry($user_id, $responseArray) {

//scene count
$getSceneInfo = mysql_query("SELECT * FROM scene WHERE uid='" . $user_id."'") or die("error3".mysql_error());
$sceneCount = mysql_num_rows($getSubscribe_query)or die("error34".mysql_error());

//latest scene
$getLatestScene = mysql_query("SELECT * FROM scene WHERE uid='" . $user_id . "' ORDER BY time_created DESC LIMIT 1") or die("error4".mysql_error());
while($row = mysql_fetch_array($getLatestScene) or die("error44".mysql_error())){
    $title = $row['title'];
    $time = $row['time_created'];
}


//count follower
$getFollower = mysql_query("SELECT * FROM subscribes WHERE target_id='" . $user_id . "'") or die("error5".mysql_error());
$followerCount = mysql_num_rows($getFollower) or die("error54".mysql_error());

//get subscriber info
$getSubInfo = mysql_query("SELECT * FROM user WHERE uid='" . $user_id . "'") or die("error6".mysql_error());
while ($row = mysql_fetch_array($getSubInfo)or die("error66".mysql_error())){
    $dp = $row['dp_file'];
    $name = $row['name'];
}

//store data response to array
$response = array('name' => $name, 'dp' => $dp, 'title' => $title, 'uploadtime' => $time, 'scenecount' => $sceneCount, 'followercount' => $followerCount);
//store response to page
$responseArray . array_push($response);
   }

   ?>

В основном я пытался получить некоторую информацию из разных таблиц в mySQL и хранить эти данные в массиве, чтобы я мог передавать их в другие файлы JavaScript с помощью AJAX.

Эти коды каким-то образом вызывают ошибки MySQL с ошибками в них.

Я попытался назначить дополнительные строки, чтобы идентифицировать каждое сообщение об ошибке, но он показывает только строку, которую я написал, и не вызывает никаких ошибок.

PS Я использую PhpMyAdmin.

Пожалуйста помоги.

  • 0
    Пожалуйста, избегайте использования устаревших функций mysql_* .
  • 1
    Во-первых, вы должны указать, что именно показано. У вас много обращений к mysql, где в скрипте возникает ошибка? Как появляются эти сообщения об ошибках? Во-вторых, вы не должны использовать функции mysql_* так как они устарели и представляют угрозу безопасности. Изучите использование PDO ( php.net/PDO ) и прочитайте об уязвимостях SQL-инъекций, чтобы понять, почему.
Показать ещё 1 комментарий
Теги:
phpmyadmin

2 ответа

2

Трудно сказать, является ли это единственной проблемой, но вы не можете проверить наличие ошибок при извлечении. mysql_fetch_*() возвращает FALSE когда строки не оставлены, но это не является условием ошибки:

// Don't do this!
// If no rows are found, or as soon as you have fetched all rows,
// it will exit with a bogus error.
while($row = mysql_fetch_array($getLatestScene) or die("error44".mysql_error())){}

// Instead check for errors first, then just loop:
$getLatestScene = mysql_query("SELECT * FROM scene WHERE uid='" . $user_id . "' ORDER BY time_created DESC LIMIT 1") or die("error4".mysql_error());
while($row = mysql_fetch_array($getLatestScene)){}

Примечание. Ваш скрипт уязвим для SQL-инъекции. Отфильтруйте входные значения:

$listType = mysql_real_escape_string($_POST['listType']);
$uid = mysql_real_escape_string($_COOKIE['username']);

Но... это неправильная идея сохранить имя пользователя в $_COOKIE. Вместо этого вы должны сохранить это значение в $_SESSION. Любой пользователь может представлять себя как любой другой пользователь, просто создавая файл cookie. Мы не можем видеть, где вы вызываете setcookie(), но вы этого не должны делать. Вместо этого выполните:

// at start of script
session_start();
// Later, store the user in $_SESSION
$_SESSION['username'] = 'the username';
  • 0
    Большое спасибо за указание на ошибку, которую я совершил. Кажется, что единственная проблема заключалась в том, что я пытался проверять ошибки при получении.
  • 0
    Окно случайного сообщения будет вызываться где-то еще, что должно было вывести номер экземпляра в массиве. Кажется, мой массив был написан неправильно, поэтому в окне сообщения нет метки: S
Показать ещё 1 комментарий
0

Для ваших целей отладки AJAX ваш AJAX-модуль может

die(JSON_encode("mysql_error",mysql_error()))

чтобы упростить время отладки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню