无法在PHP函数中执行MYSQL查询

时间:2010-10-20 18:23:50

标签: php mysql

PHP:

function generate_uid() {  
  $uid = mt_rand();  

  $sql = "SELECT user_id  
            FROM user_registration";  

  if (!mysql_query($sql,$con)) {  
    die('Error: ' . mysql_error());  
  }  

  $result = mysql_query($sql);  
  $availability = TRUE;  

  while($row = mysql_fetch_array($result)) {  
    if($row['user_id'] == $uid) {  
      $availability = FALSE; 
    }  
  }

  if($availability == FALSE) {
    generate_uid();
  }  
}  

错误

  

警告:mysql_query():提供的参数不是第8行E:\ Web Design EC \ register2.php中的有效MySQL-Link资源   错误:

但是当我像普通的php一样执行这个函数时,没有错误,并且生成了$ uid。可能是什么问题??

4 个答案:

答案 0 :(得分:11)

$con未在当前变量范围中定义。您可以将连接作为参数传递:

function generate_uid($con) {
    ...
    mysql_query($sql, $con);
}

$uid = generate_uid($con);

或者您可以使用global

function generate_uid() {
    global $con;
    ...
    mysql_query($sql, $con);
}

$uid = generate_uid();

或者,只需将连接变量保留,并使用最后打开的连接:

function generate_uid() {
    ...
    mysql_query($sql); 
}

$uid = generate_uid();

所有这些都应该有用。

要了解有关变量范围的更多信息,请查看以下主题的PHP手册:

  

http://www.php.net/manual/en/language.variables.scope.php

答案 1 :(得分:0)

您在函数中使用$ con,但在函数范围内未定义$ con。

http://php.net/manual/en/language.variables.scope.php

你需要

a)将$ con传递给你的函数或

b)将$ con设置为全局

c)根本不使用$ con。

    if (!mysql_query($sql))

但请确保您的应用仅连接到一个数据库,否则您将遇到问题,因为当您未指定连接时,它将使用最后打开的连接。

答案 2 :(得分:0)

在您的函数内部,您的MySQL连接不存在。您需要传入,或使用global关键字:

$con = mysql_connect('localhost', 'mysql_user', 'mysql_password');

function generate_uid()
{
global $con;
$uid = mt_rand();
$sql="SELECT user_id FROM user_registration";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
$result = mysql_query($sql);
$availability=TRUE;
while($row = mysql_fetch_array($result))
{
if($row['user_id']==$uid)
{
$availability=FALSE; }
} if($availability==FALSE) { generate_uid(); }
} 

答案 3 :(得分:0)

while($row = mysql_fetch_array($result))

如果您打算将$ row用作关联数组,则不能使用它。使用:

while($row = mysql_fetch_assoc($result))

代替。

修改

MYSQL_BOTH默认打开,忘记了。其他用户指出了关于连接在功能范围内不可用的问题。