Skocz do zawartości
Zaloguj się, aby obserwować  
jensej

Debugowanie zapytania mysql

Polecane posty

Witam, da się jakoś wyświetlić błąd zapytania mysql, które raz się wykonuje a raz nie.?

Nie wyświetla żadnych błędów.

if(empty($_POST) == false && empty($errors) == true){
		$id = rand(1,9999999);
		$register_data = array(
			'id'     => $id,
			'name'         => $_POST['username'],
			'password'     => $_POST['password'],
			'type'     => 10,
			'premdays'     => 20,
			'page_acces'     => 0,
			'lastday'     => 30,
			'email'        => $_POST['email'],
			'creation'	   => date('Y.m.d')
		);
		register_user($register_data);
		header('Location: register.php?success');
		exit();
	} elseif(empty($errors) == false) {
		echo output_errors($errors);
	}

tutaj funkcja:

function register_user($register_data) {
	array_walk($register_data, 'array_sanitize');
	$register_data['password'] = md5($register_data['password']);
	$fields = '`' . implode('`, `', array_keys($register_data)) . '`';
	$data = '\'' . implode('\', \'', $register_data) . '\'';
	
	$dodane = mysql_query("INSERT INTO `accounts` ($fields) VALUES ($data)");

	}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

 

$dodane = mysql_query("INSERT INTO `accounts` ($fields) VALUES ($data)");

zmień na

$dodane = mysql_query("INSERT INTO `accounts` ($fields) VALUES ($data)") or die(mysql_error());

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

 


$id = rand(1,9999999);

 

Losowanie ID i próbowanie go wstawić do bazy bez sprawdzenia czy coś jest pod tym ID to wyjątkowo słaby pomysł.

Od tego jest autoincerement w mysql żeby tak nie robić.

  • Upvote 2

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dokładnie. Jak już stosujesz takie dziwne praktyki to przynajmniej sprawdzaj poprzez select where id='wylosowane id', bo wstawianie na ślepo niczemu dobremu nie wróży.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

 

Losowanie ID i próbowanie go wstawić do bazy bez sprawdzenia czy coś jest pod tym ID to wyjątkowo słaby pomysł.

Od tego jest autoincerement w mysql żeby tak nie robić.

 

rozumiem, na większą skalę to się nie sprawdza, zapomniałem że wylosowana liczba może się powtórzyć. Jeśli ustawię autoincorement i usunę losowanie, to powinno automaycznie dodawać id ?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

witam, może ktoś mi wytłumaczyć dlaczego owe zapytanie się nie dodaje.

	$smtp = $db_conn->prepare('INSERT INTO users (login, password, email, type, date) VALUES (:login, :password, :email, :type, NOW())');
		$smtp->execute(array(
		':login' => $login,
		':password' => $pass,
		':email' => $email,
		':type' => 0,
		));

Nie wyświetla błędów.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Najpierw zobacz jakie z tego jest budowane zapytanie i spróbuj je wykonać w phpmyadmin.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

moje początki z pdo, wklepałem w zakładce SQL :

INSERT INTO users (login, password, email, type, date) VALUES ('lol', 'lol', 'lol', 'lol, NOW())

i zadziałało. A skrypcie już niechce,

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
$smtp = $db_conn->prepare('INSERT INTO users (login, password, email, type, date) VALUES (:login, :password, :email, :type, NOW())');
		$smtp->execute(array(
		':login' => $login,
		':password' => $pass,
		':email' => $email,
		':type' => 0,
		));
if (!$smtp) {
$er = $smtp -> errorInfo();
print_r($er);
}

A teraz wyświetla?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach


$sql = "INSERT INTO users (login, password, email, type, date) VALUES ('".$login."', '".$pass."', '".$email."', '0', NOW())";

if ($db_conn -> query($sql)) {
$er = $db_conn -> errorInfo();
print_r($er);
}

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Pokaż nam strukture tej tabeli. Najlepiej screen

 

Wkradł się błąd:

$sql = "INSERT INTO users (login, password, email, type, date) VALUES ('".$login."', '".$pass."', '".$email."', '0', NOW())";

if (!$db_conn -> query($sql)) {
	$er = $db_conn -> errorInfo();
	print_r($er);
}
Edytowano przez wlodziu (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Przy połączeniu nie wybrałeś bazy danych. Jak nie mozesz sobie poradzić to pokaż kod połączenia.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach


<?php
try {
$db_conn = new PDO('mysql:host=localhost;dbname:minecra1_forum', 'mi_admin', 'vysAD');}
catch(PDOException $e){
echo "Nie można nawiązać połączenia z bazą danych";
}

?>

 

Edytowano przez jensej (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach


<?php
try {
$db_conn = new PDO('mysql:dbname=minecra1_forum;host=localhost;', 'mi_admin', 'vysAD');
} catch(PDOException $e){
echo "Nie można nawiązać połączenia z bazą danych";
}

?>

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

myślę, że się nie obrazicie jak będe tutaj pytał troszkę xD


require 'core/database/connect.php'; //baza

class user { public $data; public function getData($login, $pass) { if ($login == '') $login = $_SESSION['login']; if ($pass == '') $pass = $_SESSION['pass']; $zap = $db_conn->prepare("SELECT * FROM users WHERE login=? AND password=?"); $zap->execute(array($login, $pass)); $data = $zap->fetchAll(PDO::FETCH_ASSOC); return $data; }

$user = getData($login, $pass); 

Fatal error: Call to undefined function getData() in /home/minecra1/domains/prostacy.pl/public_html/login.php on line 39

plik z klasa jest w class/user.class.php

 

 

Edytowano przez jensej (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
$user = new user();

$user->getData($login, $pass); 

W ogóle klasa jest bez sensu, poczytaj trochę o OOP i wzorcach.

Edytowano przez Pitu (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×