PHP Масиви и MySQL

nbacool2

Registered
Index.php

Код:
<?php
session_start();
include "error_rep.php";
if ($_SESSION['logged'] == 1 || isset($_COOKIE['username']) && isset($_COOKIE['password'])) {
    require 'logged_user.php'; 
}
else {
    include 'login_check.php'; 
} 

?>

logged_user.php

Код:
<?php
include "error_rep.php";
require "db_connect.php";
$usr  = $_SESSION["username"];

$sql_insert = "SELECT access_level FROM users WHERE user_name = '" . $usr . "'";

$sql_inserted = mysql_query($sql_insert) or die(mysql_error());
$row = mysql_fetch_array($sql_inserted) or die(mysql_error());

if ($row["access_level"] == 1) {
echo "Не сте потвърдили email-a си.";
session_unset();
session_destroy();
}
else  { include "blog.php"; }
?>


Здравейте. Имах проблем с кода ми. Всичко синтактично беше правилно, но вместо да изведе информация, индекса не визуализираше нищо. Направих няколко теста и установих, че главната грешка идва от
PHP:
$sql_insert = "SELECT access_level FROM users WHERE user_name = '" . $usr . "'";

$sql_inserted = mysql_query($sql_insert) or die(mysql_error());
$row = mysql_fetch_array($sql_inserted) or die(mysql_error());

Със тази заявка взимам само едно поле от базата данни и теоритично трябва да е масив със само една стойност. Но точно тук ми дава грешката. Реших да заменя mysql_fetch_array с mysql_fetch_field и във if конструкцията $row['access_level'] със $row (защото вече е само едно поле) вече нямаше грешка. Та въпросът ми е - Може ли масив да съдържа само една стойност и ако да - защо аз получавам грешка?

2 Въпрос:

След като замених mysql_fetch_array с mysql_fetch_field и изпълних кода, получих Notice:
Object of class stdClass could not be converted to int

Тоест $row от стринг не може неявно да бъде превърнат във целочислен тип. Опитах се да го направя като преди if конструкцията сложа следното
Код:
$row = (int) $row;
обаче получих същата грешка. Въпросът ми е защо я получавам.
 
На първия ти въпрос нямам отговор. Пусни си error_reporting E_ALL (ама ти вероятно си ги пуснал, щом виждаш Notice) и display_errors On. Сложи го обратно на mysql_fetch_array и пусни $row през var_dump за да видиш какво реално съдържа:
Код:
var_dump($row);


На втория ти въпрос, отговора е в документацията:

Get column information from a result and return as an object

Т.е. $row е обект, в който вероятно има едно свойство:

Код:
$row->access_level

или ако искаш да си сигурен че е целочислена стойност:

Код:
$row = (int) $row->access_level
 

Back
Горе