可能重复:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result
我有下一堂课:
<?php
class DbHelper{
private $databaseURL;
private $databaseUName;
private $databasePWord;
private $databaseName;
private $nameOfDbWithWorkers;
private $connection;
function __construct($dbURL, $dbUserName, $dbPword, $dbName, $nameOfDbWithWorkers){
$this->databaseURL = $dbURL;
$this->databaseUName = $dbUserName;
$this->databasePWord = $dbPword;
$this->databaseName = $dbName;
$this->nameOfDbWithWorkers = $nameOfDbWithWorkers;
}
function setConnectionToDb(){
$this->connection = mysql_connect($this->databaseURL,$this->databaseUName,$this->databasePWord) OR DIE("can't connect to DB");
mysql_select_db($this->databaseName, $this->connection)or die ("Error while connecting to database");
}
function getUser($login, $pass){
echo "$login, $pass";
$query = "SELECT type FROM $this->nameOfDbWithWorkers WHERE login = '$login' and password = '$pass';";
$queryResult = $this->getDataFromDbByQuery($query);
if ((mysql_affected_rows($this->connection) == 1)){
$meta = mysql_fetch_assoc($queryResult);
if ($meta['type']=='admin'){
return 'admin';
}
if ($meta['type']=='user'){
return 'user';
}
else{
return 'nomatch';
}
}
else{
return 'nomatch';
}
}
function getDataFromDbByQuery($query){
$this->setConnectionToDb();
$result = mysql_query($query);
mysql_close($this->connection);
return $result;
}
}
?>
并通过
调用它$dbHelp = new DbHelper($dbURL, $dbUName, $dbPword, $dbName, $nameOfDbWithWorkers);
$userType = $dbHelp->getUser($login, $pass);
还有下一个错误:
Warning: mysql_affected_rows(): 5 is not a valid MySQL-Link resource in Z:\home\ecl.ru\www\classes\dbhelper.php on line 27
怎么了?
答案 0 :(得分:9)
您关闭了连接
function getDataFromDbByQuery($query){
$this->setConnectionToDb();
$result = mysql_query($query);
mysql_close($this->connection); // <----
return $result;
}
如果你想稍后在你的脚本中使用它,你不应该这样做;)但是,因为PHP关闭所有在脚本端打开自己,你根本不需要自己关闭它。
更新(只是为了避免下一个问题;))
您可能希望使用mysql_num_rows()
代替mysql_affected_rows()
。第一个返回SELECT
- 查询返回的行数,另一个返回DELETE
,INSERT
或{{1}返回受影响的行数(;)) }查询。哦,UPDATE
我忘了。
答案 1 :(得分:2)
mysql_affected_rows
通过最后一次INSERT,UPDATE,REPLACE或DELETE
获取受影响的行数你正在使用SELECT ..
对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他返回结果集的语句,mysql_query()会在成功时返回资源,或者在出错时返回FALSE。
希望能解决你的问题。你需要更改一些代码来处理这个问题。
答案 2 :(得分:1)
首先,使用mysql_num_rows进行行计数,mysql_affected_rows返回已更改行数,如php.net手册中所述
通过与link_identifier关联的最后一次INSERT,UPDATE,REPLACE或DELETE查询获取受影响的行数。
第二 - 你正在使用mysql函数,把那里的链接标识符或结果标识符
答案 3 :(得分:0)
这是mysql_affected_rows()的签名:
int mysql_affected_rows ([ resource $link_identifier ] )
获取受影响的行数 最后一次INSERT,UPDATE,REPLACE或DELETE 与link_identifier相关联的查询。
link_identifier
MySQL连接。如果未指定链接标识符,则为最后一个 假设由mysql_connect()打开的链接。如果没有找到这样的链接,它 将尝试创建一个,就像调用mysql_connect()一样 参数。如果未找到或建立连接,则为E_WARNING级别 生成错误。
因此需要一个到DB的开放链接。但是,在调用函数之前,getDataFromDbByQuery()
方法会关闭连接:
function getDataFromDbByQuery($query){
$this->setConnectionToDb();
$result = mysql_query($query);
mysql_close($this->connection);
return $result;
}