Ошибка в заявлении PDO - PullRequest
       4

Ошибка в заявлении PDO

1 голос
/ 04 августа 2011

ОШИБКА: * Ошибка разбора: синтаксическая ошибка, неожиданный T_VARIABLE в строке 9 * <- все равно выдает мне ту же ошибку .. </p>

PHP

<?php
#connect mysql
require_once "dbcred.php";
$dbh = testdb_connect ();

session_start(); 
$username = $_POST['regduser']; 
$userpass = md5($_POST['regdpass']); 
$sql = $pdo->prepare("SELECT * from Students WHERE regduser=:username and regdpass=:pass");
$sql->bindParam(':username', $username)
$sql->bindParam(':pass', $userpass)
$sql->execute();
$result = mysql_query($sql); 
if (mysql_num_rows($result)!= 1) { 
 $error = "Login failed"; 
 #include "loginform.php"; 
} else { 
    echo "<h1>exists</h1>";
 #$_SESSION['regduser'] = "$username"; 
 #$_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; 
 // any other data needed to navigate the site or 
 // to authenticate the user can be added here 
 #include "membersection.php"; 
}

?>

dbcred.php

<?php
   # pdo_testdb_connect.php - function for connecting to the "test" database

   function testdb_connect ()
   {
     $dbh = new PDO("mysql:host=localhost;dbname=#", "root", "");
     return ($dbh);
   }
?>

HTML:

<form action="inc/check_regUsr.php" method="post" id="userLogon">
    <div class="field required">
        Username: <input type="text" name="regduser" tabindex="1" /><br />
        </div>
        <div class="field required">
        Password: <input type="text" name="regdpass" tabindex="2" /><br />
        </div>
        <input type="submit" name="submitUser" />
</form>

Ответы [ 5 ]

5 голосов
/ 04 августа 2011
$sql = $dbh->prepare("SELECT * from Students WHERE regduser=:username and regdpass=:pass");
$sql->bindParam(':username', $username)
$sql->bindParam(':pass', $userpass)
$sql->execute();

Бобби-столы PHP .

Если вы уже используете PDO, используйте параметризованный запрос, чтобы воспользоваться преимуществом экранирования. Кроме того, вы используете одинарные кавычки в запросе и заключить строку. Используйте двойные кавычки для строки и одинарные кавычки в запросе, потому что, как сейчас, вы уже заканчиваете строку после первой одинарной кавычки.

2 голосов
/ 04 августа 2011

В запросе необходимо указать синтаксис конкатенации строк (точки):

$sql = $pdo->prepare('SELECT * from Students WHERE regduser="'.addslashes($username).'" and regdpass="'.addslashes($userpass).'"');

Вы также можете использовать двойные кавычки для вашей строки, что означает, что переменные будут заменены внутри строки.

$username = addslashes($username);
$sql = $pdo->prepare("SELECT * from Students WHERE regduser='$username' and regdpass='$userpass'");

Я также избежал ваших переменных, вам нужно убедиться, что вы всегда экранируете данные от пользователя, прежде чем они будут использованы в ваших запросах, или используйте PDO, чтобы поменять их местами с вопросительными знаками (?)

1 голос
/ 04 августа 2011

вы используете конкатенацию строк неправильно.Строка 9 должна выглядеть следующим образом:

$sql = $pdo->prepare("SELECT * from Students WHERE regduser='$username' and regdpass='$userpass'");

или это, если вы хотите использовать одинарные кавычки:

$sql = $pdo->prepare('SELECT * from Students WHERE regduser=\''.$username.'\' and regdpass=\''.$userpass.'\'");
1 голос
/ 04 августа 2011

Вы должны поместить строку в двойные кавычки.PHP думает, что оператор завершается второй одинарной кавычкой.

Пример: $ sql = $ pdo-> prepare ("SELECT * from Students WHERE regduser = '$ username' и regdpass = '$ userpass'«);

0 голосов
/ 04 августа 2011

Ваша строительная строка нарушена:

$sql = $pdo->prepare('SELECT * from Students WHERE regduser='$username' and regdpass='$userpass'');
                     ^--start string                        ^---end string

Попробуйте вместо этого:

$sql = $pdo->prepare("SELECT * from Students WHERE regduser='$username' and regdpass='$userpass'");
                     ^--double quote                                                            ^---ditto
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...