MySQL变量超出范围

时间:2012-01-14 22:34:52

标签: php mysql

当我们的公司完成安装时,我正在尝试自动化一些电子邮件,下面是填充变量的代码,但是当我去使用它们时,它不包含任何数据。我做错了什么。

$panelNumber = "";
    $physicalAddress = "";
    $city = "";
    $state = "";
    $releaseNumber = "";
    $matrix = "";
    $dateOfInstall = "";
    $serverIP = "";
    $webcamIP = "";
    $webcamPort = "";
    $useLan = 0;
    $WANIP = "";
    $from= 'NIW@yesco.com';
    $from_name=' Yesco Electronics Network Operations Center';
    $market_id ="";
    $Cname="";
    $Cemail= "";

    $existingQueryResult = mysql_query("SELECT *
                                    FROM assets_new
                                    WHERE asset='" . $assetName . "'");

    $num_results = mysql_num_rows($existingQueryResult); 

    if ($num_results > 0)
    {
        while($row = mysql_fetch_array($existingQueryResult))
        {
            $panelNumber = $row['panel'];
            $physicalAddress = $row['location'];
            $city = $row['city'];
            $state = $row['state'];
            $releaseNumber = $row['release_num'];
            $matrix = $row['matrix'];
            $dateOfInstall = $row['install_dt'];
            $serverIP = $row['lansideip'];
            $webcamIP = $row['webcamip'];
            $webcamPort = $row['webcamport'];
            $useLan = $row['uselan'];
            $WANIP = $row['ipaddress'];
            $market_id= $row['market_id'];
        }
    }

    $CnameQueryResult = mysql_query("SELECT c.name, m.email
    FROM markets m, customers c
    WHERE m.customer_id = c.id
    AND m.id ='".$market_id."'");

    $num_results = mysql_num_rows($CnameQueryResult); 
    if ($num_results > 0)
    {
        while ($row = mysql_fetch_array($CnameQueryResult))
        {
            $Cname= $row['name'];
            $Cemail= $row['email'];
        }
    }

2 个答案:

答案 0 :(得分:1)

如果没有办法逐步执行代码,PHP的处理可能很痛苦。我的建议是在测试过程中回应一下,这样你就可以跟进进展。

例如,在查询中添加die,以便查看失败:

$existingQueryResult = mysql_query("<query>") or die('Error: ' . mysql_error());

如果没有失败,是否有任何结果?

$num_results = mysql_num_rows($existingQueryResult);
echo 'Results: ' . $num_results;

如果确实如此,循环是否获得了您期望的数据? (并且如同@ Different55所允许的那样,如果您只期望一个结果,则不需要循环。)

$row = mysql_fetch_array($existingQueryResult);
$panelNumber = $row['panel'];
...
echo 'Panel: ' . $panelNumber;

同时检查mysql_fetch_assoc因为我相信mysql_fetch_array只返回一个带有数字索引的数组,而mysql_fetch_assoc会获得一个带有命名索引的数组。我想$row['panel']将不包含任何数据,除非您使用关联数组。

最后,制作一个调试器函数很有帮助,您可以在调试后轻松找到并删除它。回应变量是有帮助的,但是如果你解决问题并且不小心将其中的一个放入,你就会收到一些“奇怪”的东西供用户查看。

我有一个名为pr的调试器函数,它只是以固定宽度样式回显变量,因此很容易看到数组内容。调试后删除就像搜索pr(一样简单。

function pr($ar, $vn='undefined')
{
    echo '<span style="font-family: Lucida Console; font-size: 8pt; white-space: pre; display: block; color: #66F;">';
    echo strtoupper($vn) . ':';
    if(gettype($ar) != 'array') echo ucfirst(gettype($ar)) . ' ';
    print_r($ar);
    echo '</span>';
}

您可以这样使用它:

pr($panelNumber, 'panelnumber');

// PANELNUMBER:String asdf
祝你好运!

答案 1 :(得分:0)

经过几个月的撞击我的头撞墙后,我发现了它。为了完成我们称之为安装的操作,调用了以下函数。 write_to_pdf() 2. delete_info() 3. send_email()

如您所见,我在发送电子邮件之前从表中删除了信息。所以电子邮件功能正常。他们正按照我的要求发送。感谢大家的帮助和贡献。