PHP没有按预期返回MySQL查询的结果

时间:2013-01-17 20:28:19

标签: php mysql wamp

我正在尝试创建一个依赖于数据库中某些信息的变量。我正在尝试生成一个存储路径的$path变量,具体取决于从数据库中恢复的信息。

$linkid = mysql_connect('localhost','user','password');
mysql_select_db("table", $linkid);
$variable = "00001";
$groupID = null;
$temp = mysql_query("SELECT groupID FROM table WHERE memberID='$variable'", $linkid);

while ($row = mysql_fetch_row($temp)){
    global $groupID;
    foreach ($row as $field){
        $groupID = $field;
    }
}

....

$path = "C:\WAMP\www\project\\" . $groupID;
$dir_handle = @opendir($path) or die('Unable to open $path');

这背后的想法是在PHP运行之前设置$variable,但是它被设置为00001以进行测试。理想情况是$path应该等于C:\WAMP\www\project\00001\。目前,当我echo返回$path时,我得到的是原始路径,但未添加$groupID

我还收到消息“mysql_fetch_row()期望参数1是资源”但我之前使用此方法检索信息并且工作正常,我以同样的方式设置我的表,所以我不知道认为问题存在。

我有一种感觉我错过了一些明显的东西,所以任何帮助都会受到赞赏。这不是一个任务或任何与学校有关的事情(只是尝试了解更多信息)所以请自行解决问题并解释原因:)

此外,只有一个memberID会与$variable匹配,所以如果有其他方法可以获取它,我会很高兴知道。

哦,我知道我的变量名称令人震惊,但他们只是在这里,在我的实际代码上他们是不同的所以没有批评请:p

编辑: SQL查询是正确的,按照BT634的建议,在phpMyAdmin上运行时,我得到了我想要的groupID。

4 个答案:

答案 0 :(得分:2)

mysql_select_db("table", $linkid)

实际应该是

mysql_select_db("database_name", $linkid)

因为您要连接到包含表而不是表本身的数据库。

另外,请尝试mysql_result($temp,0)而不是while循环

答案 1 :(得分:1)

找出肯定运行的查询,并将其粘贴到普通的MySQL客户端,以确保您的查询正确。

在定义“$ variable”

后立即执行此操作
exit("SELECT groupID FROM table WHERE memberID='$variable'");

然后将输出复制到MySQL客户端(或命令行中的MySQL)。

答案 2 :(得分:1)

首先,您没有在连接中指定要连接的数据库 - 您要指定。您可能还想检查查询返回的行数:

$temp = mysql_query("SELECT groupID FROM table WHERE memberID='$variable'", $linkid);
echo mysql_num_rows($temp);

如果仍然抱怨$temp不是有效资源,请将您的MySQL连接代码更改为:

// Establish connection
$con = mysql_connect("localhost","peter","abc123");
if (!$con) die('Could not connect: ' . mysql_error());
mysql_select_db("my_db", $con);

// Make your query
$result = mysql_query("SELECT groupID FROM table WHERE memberID='$variable'");

// Find out what the value of the query is (i.e. what object/resource it is)
var_dump($result);

一旦您知道MySQL正在返回有效数据,请提取您想要的值。您不必使用全局变量:

while ($row = mysql_fetch_row($temp)){
    $groupId = $row[0];
}

// Use $groupId however you please...

要记住的一件事是mysql_fetch_row将返回

array
(
   0 => '...'
)

虽然mysql_fetch_assoc将返回:

array
(
   'groupId' => '...'
)

答案 3 :(得分:1)

尝试这样的事情:

global $groupID;

$linkid = mysql_connect('localhost','user','password');
mysql_select_db("table", $linkid);
$variable = "00001";
$groupID = null;
$sql = "SELECT groupID FROM table WHERE memberID='$variable'";
$temp = mysql_query($sql, $linkid) or die(mysql_error());

$row = mysql_fetch_row($temp);
if ($row) {
    $groupID = $row['groupID'];
}

如果要检索单个值,并且保证它是唯一的,则不需要循环结构。我添加了一个检查,以确保在出现问题时退出并出现错误 - 最好在任何地方都这样做,所以例如也可以使用mysql_select_db