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。可能是什么问题??
答案 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手册:
答案 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默认打开,忘记了。其他用户指出了关于连接在功能范围内不可用的问题。