2012-10-31 116 views
1

我有一个PHP脚本如下:未定义连接可变

function addPost(BlogPost $item, $tags) { 
     $connection = mysql_connect('localhost', '***', '***') or die(mysql_error()); 
     mysql_select_db('jschaible1') or die(mysql_error()); 

     $queryString = "insert into BlogPost values (null, '" . $item->Title . "', '" . $item->Body . "', " . "now());"; 

     $result = mysql_query($queryString) or die(mysql_error()); 

     $dbResult = mysql_query('select * from blogpost where Title = "' . $item->Title . '";') or die(mysql_error()); 
     while ($row = mysql_fetch_array($dbResult)) { 
      $tableID = $row['BlogPostID']; 
     } 

     foreach($tags as $t) { 
      $queryString = "insert ignore into Tag values('" . strtolower($t) . "');"; 
      mysql_query($queryString) or die(mysql_error()); 

      $queryString = "insert into blogposttag values (" . $tableID . ", '" . strtolower($t) . "');"; 
      mysql_query($queryString) or die(mysql_error()); 
     } 

     echo $connection; 
     mysql_close($connection) or die(mysql_error()); 
    } 

函数被调用是这样的:

<?php 
    session_start(); 

    $errors = ''; 

    if (!isset($_SESSION['dadfg6d5f6df54'])) 
     header('Location:admin.php'); 
    else { 
     include('Classes.php'); 
     include('mySql.php'); 
     include('utils.php'); 

     if(isset($_POST['Submit'])) { 
      if ($_POST['Title'] == '') { 
       $errors = 'Post must have a title!'; 
      } 
      else if ($_POST['PostBody'] == '') { 
       $errors = 'Post must be something!'; 
      } 
      else if (strlen($_POST['PostBody']) < 10) { 
       $errors = "Write something substantial, c'mon!"; 
      } 
      else if ($_POST['Tags'] == '') { 
       $errors = "At least one tag must be entered"; 
      } 
      else { 
       $newPost = new BlogPost(NULL, sanitize($_POST['Title']), sanitize($_POST['PostBody']), NULL); 

       $newPost->Title = addEmoticons($newPost->Title); 
       $newPost->Body = addEmoticons($newPost->Body); 

       $tags = str_replace(',', '', $_POST['Tags']); 
       $tags = str_replace(';', '', $tags); 
       $tags = explode(' ', $tags); 

       error_reporting(E_ALL); ini_set('display_errors', 1); 
       addPost($newPost, $tags) or die(); 

       $errors = 'Post added successfully'; 
      } 
     } 
    } 
?> 

当它到达mysql_close(),页面只是停止执行,我得到一个空白页面。这让我非常沮丧,我不明白为什么会发生这种情况,尤其是看到前一行中的回显如何显示“资源ID#6”。我没有收到任何错误消息,只是一个空白页!请帮忙!

+0

打开错误报告。 '的error_reporting(E_ALL); ini_set('display_errors',1);'也发布如何调用函数 –

+0

mysql_close()将在失败时返回FALSE,并且如果脚本已经确定它不再需要该资源,它将关闭它隐式地在你明确的调用之前。因此,没有什么可以关闭,它返回false,并触发你的die()调用。只要删除'die()'。 –

+0

我试图删除死()。该页面刚刚打开,我收到一个白页 – Jack

回答

2

你的函数没有返回值。因此它返回NULL其中evaluates as a "falsy" value。由于您按照or die()的呼叫关注它,因此错误评估会触发or die()并终止您的脚本。

// Don't do this: 
addPost($newPost, $tags) or die(); 

// Do this: 
addPost($newPost, $tags); 

在你的功能,你可以return TRUE结束,但除非你想返回根据您的文章添加成功或失败的值是完全不必要的。你的方式,die()只是造成不必要的伤害。由于函数中所有潜在的失败点都将因错误而终止脚本,因此返回TRUE没有太大意义。函数调用后,请删除die()

+0

这个修好了,非常感谢!我不记得最初发生了什么,但我遇到了另一个错误,我开始在试图使它工作的所有事情上投掷“或死()”。我对php还是有点新的,我想我认为“或die()”与C语言中的“try {} catch {}”是等价的。谢谢! – Jack

+1

@Jack PHP [有它自己的try/catch](http://php.net/manual/en/language.exceptions.php),但并非所有的语言方面都会抛出异常。调试的'或die()'方法是从Perl习惯中继承的一个不幸的保留。相反,我建议总是将数据库调用返回到一个变量,然后测试变量。 '$ result = mysql_query(....); if(!$ result){echo mysql_error();} else {do_what_you_wanted()}' –

+0

谢谢。这是一个学校项目,他们主要关注纯粹的PHP方面,我们只简要介绍一下数据库连接部分。当涉及到PHP的这个方面时,我并不是那么熟悉最佳实践和类似的东西。 – Jack