使用PHP从数据库打印数据
每个人都说从MySQL数据库打印数据很容易,但到目前为止,我被难倒了。我是PHP新手,正在尝试从数据库打印个人数据。例如,Joe Bloggs已经登录,然后他可以查看他的兴趣爱好等。所以我试图实现的是让用户登录并查看他们的信息 基本上,用户可以登录,但是我尝试设置一个变量来存储SQL查询,如果用户成功登录,则将其打印出来,但是我现在收到以下错误消息-这不会消失使用PHP从数据库打印数据,php,mysql,database,phpmyadmin,Php,Mysql,Database,Phpmyadmin,每个人都说从MySQL数据库打印数据很容易,但到目前为止,我被难倒了。我是PHP新手,正在尝试从数据库打印个人数据。例如,Joe Bloggs已经登录,然后他可以查看他的兴趣爱好等。所以我试图实现的是让用户登录并查看他们的信息 基本上,用户可以登录,但是我尝试设置一个变量来存储SQL查询,如果用户成功登录,则将其打印出来,但是我现在收到以下错误消息-这不会消失 ( ! ) SCREAM: Error suppression ignored for ( ! ) Warning: mysql_fet
( ! ) SCREAM: Error suppression ignored for
( ! ) Warning: mysql_fetch_array() expects parameter 1 to be resource, string given in C:\wamp\www\myfiles\login.inc.php on line 32
Call Stack
# Time Memory Function Location
1 0.0015 365584 {main}( ) ..\index.php:0
2 1.0144 387472 include( 'C:\wamp\www\myfiles\login.inc.php' ) ..\index.php:6
3 1.0427 390752 mysql_fetch_array ( ) ..\login.inc.php:32
像几乎所有的初学者一样,我犯了一个错误,创建了一个庞大的文件,这使我试图编写的代码过于复杂(而且已经很晚了,我很累,因此我可能看不到任何错误)。然而,这是很好的评论
如果您有任何意见和建议,我将不胜感激
//如果用户未输入UN和PW发送错误消息,则创建变量username和password
if(isset($\u POST['username'])和&isset($\u POST['password'])){
$username=$_POST['username'];
$password=$_POST['password'];
if(空($username)和空($password)){
echo“提供用户名和密码”;
}
//将MySQl查询保存为变量,以便以后引用它们
//用于登录
$query=“从`students`中选择*,其中`username`='$username'和`password`='$password';
//用户登录结果
$result=mysql\u query($query);
//显示用户正在学习的课程
$user=“从“学生”中选择*”;
//设置登录条件
如果($结果){
//如果数据按行匹配,则发送一条消息,说明用户已登录
如果(mysql_num_rows($result)>0){
会话_重新生成_id();
$member=mysql\u fetch\u assoc($result);
$\会话['姓氏\名称]=$member['username'];
$_会话['SESS_ID']=$member['password'];
会话写入关闭();
//如果登录,则列出他们正在学习的课程
echo“您现在已登录”;
while($row=mysql\u fetch\u数组($user))
{
echo$row['GivenName']、$row['username']、$row['password']、$row['Course1']、$row['Course2']、$row['Course2'];
回声“
”;
}
退出();
}否则{
//创建布尔条件-如果不匹配,则发送错误消息
$errflag=true;
如果($errflag){
会话写入关闭();
回显“无效的用户名/密码组合”;
退出();
}
}
}否则{
//显示错误
echo mysql_errno().“:”.mysql_error();exit();
}
}
?>
用户名:密码:
如果您是php和mysql的初学者,则以下是一些基础步骤,这些步骤可能会帮助您,这取决于您适合使用的连接
MYSQLI:
第一:设置数据库用户、PASS、HOST和DBNAME的配置
$conn = new mysqli('database_server','database_username','database_password','database_name');
$conn = mysql_connect('database_server','database_username','database_password');
mysql_select_db($conn,'databasename')
第二:创建查询(您可以在此处插入查询)
最终:显示使用MYSQL函数的记录,如
while($row = $result->fetch_assoc()){
echo $row['dabatase_columnname'];
echo $row['database_columnname'];
}
while($row = $result->mysql_fetch_array($result)){
echo $row['dabatase_columnname'];
echo $row['database_columnname'];
}
PDO:
连接到数据库
db=新的PDO(“…”)
创建查询
$statement = $db->prepare("select id from some_table where name = :name");
使用bind参数执行查询
$statement->execute(数组(':name'=>“Jimbo”)
获取通过查询返回的所有数据
$row = $statement->fetch(); // Use fetchAll() if you want all results, or just iterate over the statement, since it implements Iterator
MYSQL:
第一:设置数据库用户、PASS、HOST和DBNAME的配置
$conn = new mysqli('database_server','database_username','database_password','database_name');
$conn = mysql_connect('database_server','database_username','database_password');
mysql_select_db($conn,'databasename')
第二:创建查询(您可以在此处插入查询)
最终:显示使用MYSQL函数的记录,如
while($row = $result->fetch_assoc()){
echo $row['dabatase_columnname'];
echo $row['database_columnname'];
}
while($row = $result->mysql_fetch_array($result)){
echo $row['dabatase_columnname'];
echo $row['database_columnname'];
}
问题是你没有这样做:
mysql_query($user);
只需在mysql\u fetch\u数组之前添加如下内容:
$user_result = mysql_query($user);
while($row = mysql_fetch_array($user_result)){
//...
}
但是,是的,正如另一个人所说,请改用MySqli
或PDO
。它们不再被维护,并被正式弃用
下面是一个使用PDO和准备好的语句的代码示例。您可能只需要更改连接信息
<?php
// Get your connection sorted.
$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password');
// Prepare a few statements for use later.
$stmtResult = $db->prepare("SELECT * FROM `students` WHERE `username`=?AND `password`=?");
$stmtUser = $db->prepare("SELECT * FROM `students`");
// create variables username and password,if a user doesn't enter a UN and PW send error message
if (isset($_POST['username'])&& isset ($_POST['password'])){
$username= $_POST['username'];
$password= $_POST['password'];
if (empty ($username)&&empty ($password)){
echo 'supply username and password';
}
// Use the try catch paradigm instead of if/else, because PDO will
// throw an exception if things go sideways.
try{
// Execute the prepared statement, passing in the variables.
$stmtResult->execute(array($username, $password));
// Get the results in an array & then get the result count.
$rows = $stmtResult->fetchAll(PDO::FETCH_ASSOC);
$row_count = $stmt->rowCount()
if($row_count > 0) {
session_regenerate_id();
$member = $rows[0];
$_SESSION['SURNAME_NAME'] = $member['username'];
$_SESSION['SESS_ID'] = $member['password'];
session_write_close();
//if logged on list course they are studying
echo 'you are now logged in.<a href = "logout.inc.php">Log out</a>';
$stmtUser->execute();
// I moved this next call down to the loop because
// there is no real reason to call it sooner than this
while($row = $stmtResult->fetchAll(PDO::FETCH_ASSOC))
{
echo $row['GivenName'],$row['username'], $row['password'],$row['Course1'],$row['Course2'], $row['Course2'];
echo "<br />";
}
exit();
}else {
// create boolean condition- if no match send error message
$errflag = true;
if($errflag) {
session_write_close();
echo 'invalid username/password combination';
exit();
}
}
}catch(PDOException $ex) {
// This is what happens if something did go sideways.
echo $ex->getCode() . ": " . $ex->getMessage();
exit();
}
}
?>
<form method="POST">
Username: <input type = "text" name="username"> Password: <input type ="password" name="password">
<input type="submit" value="Log in">
</form
。它们不再得到维护。看到了吗?改为了解,并使用或-将帮助您决定哪个.Variable$user包含字符串“select…”。Mysql_fetch_数组需要资源作为参数。因此,尝试$tMP= MySqLyQualQuy($Author)和下一个($ROL= MyQuLLFETCHCHYARM数组($TMP))…如果您的用户可以有多个课程,您也可以考虑将其存储在您的学生表和课程表之间的单独查找表中。您的查找表将具有用户id和课程id。请慢慢开始,然后逐步建立。凯伊给了你第一步。