2015-02-18 3 views
0

Итак, у меня возникли некоторые проблемы с запросом. Я также работаю над MySQLi, так что могут быть некоторые ошибки. У меня есть таблица с именем аутентификация и в нем, он имеет следующие столбцыНеизвестный столбец 'abcdefg' in 'where clause'23

||id 
||UserName 
||Password 

При выполнении запроса я получаю мое имя в качестве имени столбца, так что дает неизвестную ошибку столбца. Кажется, я не вижу, что не так с моим кодом. Любая помощь приветствуется.

<?php 
// Report all errors 
error_reporting(E_ALL); 
session_start(); // Start PHP 
// Get info sent to server from login form. 
$my_username = $_POST['username']; 
$my_password = $_POST['password']; 
// MD5 Encrypt the password. 
$my_password_md5 = md5($my_password); 
// Connect to DB 
$db = new MySQLi('localhost', 'user', 'password!', 'database'); 
if ($db->connect_error) { 
    $error = $db->connect_error; 
} 

//SQL query 
$sql = <<<SQL 
    SELECT UserName 
    FROM `Authentication` 
    WHERE `username` = $my_username HAVING `username` = $my_password_md5 
SQL; 

$result = $db->query($sql) or die($db->error.__LINE__); 

if($result = $db->query($sql)) 
$rows=mysqli_fetch_assoc($result); 
// Count how many rows match that information. 
$count=mysqli_num_rows($result); 
// Check if there are any matches. 
if($count==1) 
{// If so, register $my_username, $my_password and redirect to the index page. 
ini_set("session.gc_maxlifetime", "18000"); 
session_cache_expire(18000); 
$cache_expire = session_cache_expire(); 
$_SESSION['username'] = $my_username; 
$_SESSION['id'] = $rows['id']; 
header("location:http://somesitegoeshere.com"); 
} 

// If not, redirect back to the index page and provide an error. 
else { 
header("location:http://somesitgoeshere.com?err=1"); 
} 
?> 
+0

Строковое значение должно быть обернуто в одну цитату. –

ответ

2
$sql = <<<SQL 
    SELECT UserName 
    FROM `Authentication` 
    WHERE `username` = $my_username HAVING `username` = $my_password_md5 
SQL; 

Вы забыли процитировать $my_username. так что ваш запрос выглядит как WHERE 'username' = abcdefg HAVING ...

Mysql думает, что вы пытаетесь сравнить с столбцом, поместите свое имя пользователя в кавычки. Также поместите свой пароль в кавычки, чтобы он не думал, что ваш пароль - это столбец.

$sql = <<<SQL 
    SELECT UserName 
    FROM `Authentication` 
    WHERE `username` = "$my_username" HAVING `username` = "$my_password_md5" 
SQL; 
+0

Что такое \ for? Похоже, что кто-то выходит за рамки цитаты, и один идет в нее? –

+0

\ является [escape-символом] (http://php.net/manual/en/regexp.reference.escape.php). Однако для этого сценария я помещаю их по ошибке, и они не нужны. – castis

+1

Ok gotcha. Большое вам спасибо, этот код работал как шарм! –

Смежные вопросы