2013-07-23 6 views
0

У меня есть простой вопрос. как я могу использовать данные, хранящиеся в поле в качестве переменной в запросе?, используя значение поля из таблицы внутри запроса

В этом примере я хочу использовать crypt и вам нужно значение внутри поля пароля моей базы данных. как мне это сделать.

$myusername=strtolower($myusername); 
$query='SELECT * FROM auth ' 
     ."WHERE uname='$myusername' " 
     ."and pword=crypt('$mypassword','pword')"; 
$result= mysqli_query($connection, $query); 
if(mysqli_num_rows($result)>0)...... 

pword и uname мои имена полей внутри таблицы AUTH. это мой первый скрипт в PHP и SQL.

+1

должно быть пробел после 'auth' или перед' WHERE' в противном случае вы получите 'authWHERE' и синтаксис или пропущенную ошибку таблицы. – Gustek

ответ

2

Если вы хотите сослаться на поле в базе данных, не процитировать:

$myusername = $connection->real_escape_string(strtolower($myusername)); 
$mypassword = $connection->real_escape_string($mypassword); 
$query='SELECT * FROM auth' 
     ."WHERE uname='$myusername'" 
     ."and pword=crypt('$mypassword',pword)"; 
+1

Что такое $ mysqli? – femchi

+0

Извините, должно быть, '$ connection'. – Barmar

1

я предлагаю использовать вместо prepared statements:

$myusername = strtolower($myusername); 

$sql = "SELECT * FROM auth HERE uname = ? and pword = crypt(?, 'pword')"; 

// prepare statement 
$stmt = mysqli_prepare($connection, $sql); 

if(!$stmt)die('can not prepare statement'); 

// supply parameter values:  
mysqli_stmt_bind_param($stmt, 'ss', $myusername, $mypassword); 

// execute 
if(!mysqli_stmt_execute($stmt))die('can not execute statement'); 

// if there are rows... 
if(mysqli_stmt_num_rows($stmt)){ 

    // bind to variables 
    mysqli_stmt_bind_result($stmt, $col1, $col2 /* , colN */); 

    // output 
    while(mysqli_stmt_fetch($stmt)) { 
     var_dump($col1, $col2 /* , colN */); 
    } 

} 

// free statement 
mysqli_stmt_close($stmt); 

Я предлагаю читать дальше:

  1. SQL injection
  2. How can I prevent SQL injection in PHP?
1

Предполагая, что $ соединение является подключение к базе данных:

$connection = new mysqli("localhost", "my_db_user", "my_db_password", "my_table"); 

И если вы хотите, чтобы получить поле user_id и зашифрованный пароль:

$myusername = $connection->real_escape_string(strtolower($myusername)); 

$query="SELECT user_id, crypt('{$mypassword}','pword') AS my_password FROM `auth` 
     WHERE uname='{$myusername}' 
     and pword=crypt('{$mypassword}','pword')"; 
$result = $connection->query($query); 

if ($result !== false && $result->num_rows > 0) { 
    $row = $result->fetch_object(); 
    $myUserID = $row->user_id; 
    $myPassword = $row->my_password; 
} 

Примечания:

  • Включите переменные PHP внутри строки с помощью {} для лучшей практики.
  • Вы можете заключить строку запроса в пару «", хотя строки занимают более одной строки.

Надеюсь, эта помощь.