0

这是我遇到的问题。

我创建了一个登录页面,用户在其中输入他的姓名并通过进入。数据库已经创建,我将输入的登录信息存储在会话变量中。

单击提交时,我将用户重定向到 php 访问 mysql 数据库并在数据库中搜索用户名并使用会话变量传递组合的页面。

还有问题。会话变量无法访问数据库表条目。

这是我的代码:

<?php
//starting the session
session_start();

//connecting to database and table "testdb"
@mysql_connect("localhost","root","") or die("no connect");
@mysql_select_db("testdb") or die ("no select");


//the session variables holding the username and password
//trying to access the entries in table named "table"
$sql="SELECT * FROM `table` WHERE name='.$_SESSION['uname'].' AND
pass='.$_SESSION['pass'].'";

$query=mysql_query($sql);

//printing the result which is just one entry
while($result=mysql_fetch_array($query))

{

echo $result['name'].' ';
echo $result['pass'];

}

?>

我不知道错误是什么,或者我是否使用了错误的语法。我没有对实际代码写评论……这只是一个相同的例子:D

我不是在寻找替代品,因为我现在正处于学习阶段。因此,对此代码的任何修复将不胜感激。

PS:我不知道java脚本。

4

3 回答 3

2

您的字符串语法不正确,这实际上会产生解析错误

$sql = "SELECT * FROM `table` WHERE name='" .$_SESSION['uname']. "' AND
pass = '" .$_SESSION['pass'] ."'";

您需要在使用之前实际关闭字符串$_SESSION['key'],或者去掉引号以便对其进行插值。

此代码也极易受到注入。您应该对 PDO 使用参数化查询。

$stmt = $pdo->prepare("SELECT * FROM `table` WHERE name = ? AND pass = ?");
$stmt->execute(array($_SESSION['uname'], $_SESSION['pass']));
于 2013-07-04T14:04:41.917 回答
0

您的查询有语法错误。您要么需要在会话值周围加上双引号,要么使用大括号。尝试 -

$sql="SELECT * FROM `table` WHERE name='".$_SESSION['uname']."' AND
pass='".$_SESSION['pass']."'";

或者

$sql="SELECT * FROM `table` WHERE name='{$_SESSION['uname']}' AND
pass='{$_SESSION['pass']}'";
于 2013-07-04T14:04:34.410 回答
0

最明显的是,这完全容易受到 SQL 注入攻击。但是忽略这个...

$sql="SELECT * FROM `table` WHERE name='.$_SESSION['uname'].' AND pass='.$_SESSION['pass'].'";

... 应该 ...

$sql="SELECT * FROM `table` WHERE name='".$_SESSION['uname']."' AND pass='".$_SESSION['pass']."'";
于 2013-07-04T14:04:59.723 回答