MYSQL 中函数PASSWORD()的问题 (50分)

  • 主题发起人 主题发起人 福特饱
  • 开始时间 开始时间

福特饱

Unregistered / Unconfirmed
GUEST, unregistred user!
本人初学PHP+MYSQL,写了一段小的用户验证程序,可是出现了问题:
本来数据库用SELECT查找用户可以用,但是我把密码用PASSWORD()加密后,
再用SELECT * FROM USER WHERE PASSWORD=PASSWORD('$PASS');查找就找不到了
,这是怎么回事?我的源代码如下:
<?
$select=mysql_select_db('bbs') ;
mysql_connect() or die ("Problem connecting to DataBase");
$query="select * from user where UserName='$username' and Password='$pass'";
$result = mysql_query($query);
if ($r = mysql_fetch_array($result)) {
$user = $r["UserName"];
$permit = $r["Permit"];
echo "User Login, press <a href=/"login.php?user=$user&amp;permit=$permit/">here</a> to continue.";
}
else
{
echo "Can not login.
Please check your username and password.";
}
?>
 
PASSWORD()是php中函数吗?
有没有错误提示信息?
用mysql_errno: 传回错误讯息代码。
mysql_error: 传回错误讯息。
这两个函数回传一下看看有没有信息~
----------------------
或者在 $result = mysql_query($query);
if ($r = mysql_fetch_array($result)) {
这两句中间加上判断是否查询结果为空!
或者选用mysql_db_query() 而不用 mysql_query,你再试试!
例:
<?php
mysql_connect($host,$user,$password);
$result = mysql_db_query("database","select * from table");
while($row = mysql_fetch_array($result)) {
echo $row["user_id"];
echo $row["fullname"];
}
mysql_free_result($result);
?>
 
PASSWORD(str)
从纯文本口令str计算一个口令字符串。该函数被用于为了在user授权表的Password列中存储口令而加密MySQL口令。
mysql> select PASSWORD('badpwd');
-> '7f84554057dd964b'
PASSWORD()加密是非可逆的。PASSWORD()不以与Unix口令加密的相同的方法执行口令加密。你不应该假定如果你的Unix 口令和你的MySQL口令是一样的,PASSWORD()将导致与在Unix口令文件存储的相同的加密值。见ENCRYPT()。
ENCRYPT(str[,salt])
使用Unix crypt()系统调用加密str。salt参数应该是一个有2个字符的字符串。(MySQL 3.22.16中,salt可以长于2个字符。)
mysql> select ENCRYPT("hello");
-> 'VxuFAJXVARROc'
如果crypt()在你的系统上不可用,ENCRYPT()总是返回NULL。ENCRYPT()只保留str起始8个字符而忽略所有其他,至少在某些系统上是这样。这将由底层的crypt()系统调用的行为决定。
ENCODE(str,pass_str)
使用pass_str作为口令加密str。为了解密结果,使用DECODE()。结果是一个二进制字符串,如果你想要在列中保存它,使用一个BLOB列类型。
DECODE(crypt_str,pass_str)
使用pass_str作为口令解密加密的字符串crypt_str。crypt_str应该是一个由ENCODE()返回的字符串。
MD5(string)
对字符串计算MD5校验和。值作为一个32长的十六进制数字被返回可以,例如用作哈希(hash)键。
mysql> select MD5("testing")
-> 'ae2b1fca515949e5d54fb22b8ed95575'
这是一个“RSA数据安全公司的MD5消息摘要算法”。
 
password()是mysql中的
我现在的问题是如果不用password(),一切正常,只不过密码是明文保存在数据库中的,
但是一用password(),就什么都查不到了。系统只是显示empty set,没有错误信息。莫非
密码加密之后就不能进行验证了?
而且我用了mysql_db_query之后显示错误的数据源,系统要求我用mysql_select_db+mysql_query
 
后退
顶部