无法从数据库中选择记录

问题描述:

我正在学习PHP和SQL,并试图找出如何从数据库中选择记录。 我创建了一个函数selectById()无法从数据库中选择记录

现在在浏览器中显示的是“Error:”,但没有显示具体的错误。

// function selectById -------------------------------------------------------------------- 
    function selectById($pUInput) { 
     $sql = mysql_query("SELECT * FROM tblStudents 
          WHERE id='$pUInput[0]'"); 

      if (!mysql_query($sql)) 
       { 
       die('Error: ' . mysql_error()); 
       } 
      echo "Record Selected"; 

    } 

PHP代码:

//Call function mainline 

mainline(); 

// Declare the function mainline 
function mainline() { 

    $uInput = getUserInput(); 

    $connectDb = openConnect(); // Open Database Connection 
    selectDb($connectDb); // Select Database 
    doAction($uInput); 
    //display(); 
    //closeConnect(); 

} 

//Declare function getUserInput -------------------------------------------------------- 
function getUserInput() { 

    echo "In the function getUserInput()" . "<br/>"; 

    // Variables of User Input 
    $idnum = $_POST["idnum"];    // id (NOTE: auto increments in database) 
    $fname = $_POST["fname"];    // first name 
    $lname = $_POST["lname"];   // last name 
    $major = $_POST["major"];   // major 
    $year = $_POST["year"];   // year 
    $action = $_POST["action"];  // action (select, insert, update, delete) 

    $userInput = array($idnum, $fname, $lname, $major, $year, $action); 

    return $userInput; 
} 

function doAction($pUserInput) { 
    echo "In function doAction()" . "<br/>"; 

    if ($pUserInput[5] == "sel") { 
     selectById($pUserInput);  

    } elseif ($pUserInput[5] == "ins") { 
     insert($pUserInput);  
    } 

} 

// Create a database connection -------------------------------------------------------- 
function openConnect() { 
    $connection = mysql_connect("localhost", "root_user", "password"); 
     echo "Opened Connection!" . "<br/>"; 

    if(!$connection) { 
     die("Database connection failed: " . mysql_error()); 
    } 

    return $connection; 
} 

// Select a database to ---------------------------------------------------------------- 
function selectDb($pConnectDb) { 
    $dbSelect = mysql_select_db("School", $pConnectDb); 
    if(!$dbSelect) { 
     die("Database selection failed: " . mysql_error()); 
    } else { 
    echo "You are in the School database! <br/>"; 
    } 

} 

// function select --------------------------------------------------------------------- 
function selectById($pUInput) { 
    $sql = mysql_query("SELECT * FROM tblStudents 
         WHERE id='$pUInput[0]'"); 

     if (!mysql_query($sql)) 
      { 
      die('Error: ' . mysql_error()); 
      } 
     echo "Record Selected"; 

} 

// function insert ----------------------------------------------------------------------------- 
function insert($pUInput) { 

    $sql="INSERT INTO tblStudents (first_name, last_name, major, year) 
      VALUES 
     ('$pUInput[1]','$pUInput[2]','$pUInput[3]', '$pUInput[4]')"; 


     if (!mysql_query($sql)) 
      { 
      die('Error: ' . mysql_error()); 
      } 
     echo "1 record added"; 
} 



?> 

SQL语法:

CREATE TABLE `tblStudents` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `first_name` varchar(30) NOT NULL, 
    `last_name` varchar(50) NOT NULL, 
    `major` varchar(40) NOT NULL, 
    `year` date NOT NULL, 
    PRIMARY KEY (`id`) 
) 

您正在运行一个查询结果的查询。这不起作用。您将需要使用沿线的东西

$sql = mysql_query("SELECT * FROM tblStudents 
         WHERE id='" . $pUInput[0] . "'"); 

if (!$row = mysql_fetch_assoc($sql)) 

如果查询没有失败,那么将为$ row分配一个数组值。你也可以用mysql_real_escape_string来过滤pUinput,因为你不一定知道它包含了什么(或者静态地将它转换为一个整数)。

编辑

平添了几分额外的信息。

+1

感谢您的回复。 (我是PHP和SQL的新手,我试图完全理解你的答案)。所以,selectById()函数中的语句实际上并不是通过单独一个语句选择记录 - 它需要函数mysql_fetch_assoc( )。我只是总结我认为我的理解... – jc70 2010-08-31 22:07:03

+2

记住http://cwe.mitre.org/data/definitions/89.html,并看看http://docs.php.net/mysql_real_escape_string 。或者甚至更好地使用参数化查询,参见例如http://docs.php.net/pdo.prepared-statements – VolkerK 2010-08-31 22:09:46