无法从数据库中选择记录
问题描述:
我正在学习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,因为你不一定知道它包含了什么(或者静态地将它转换为一个整数)。
编辑
平添了几分额外的信息。
感谢您的回复。 (我是PHP和SQL的新手,我试图完全理解你的答案)。所以,selectById()函数中的语句实际上并不是通过单独一个语句选择记录 - 它需要函数mysql_fetch_assoc( )。我只是总结我认为我的理解... – jc70 2010-08-31 22:07:03
记住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