Попытка выполнить инструкцию SELECT в MYSQL, но она не работает - PullRequest
2 голосов
/ 22 ноября 2011

Я считаю, что синтаксис правильный, по крайней мере, согласно моему учебнику.Это всего лишь часть файла, так как другая информация не имеет отношения к моей проблеме.Имя таблицы - пользователь, а имя столбца - пользователь.Я не верю, что это является проблемой, так как другие операторы SQL работают.Хотя это не самая умная вещь, которую я знаю :) Кто-нибудь видит ошибку?

try {
$db=new PDO("mysql:host=$db_host;dbname=$db_name",
        $db_user,$db_pass);
} catch (PDOException $e) {
exit("Error connecting to database: " . $e->getMessage());
}
$user=$_SESSION["user"];

$pickselect = "SELECT game1 FROM user WHERE user='$user' ";
$pickedyet = $db->prepare($pickselect);
$pickedyet->execute();
echo $pickselect;

if ($pickedyet == "0")
{ 
echo '<form method="post" action="makepicks.php">
<h2>Game 1</h2>......'

Ответы [ 3 ]

4 голосов
/ 22 ноября 2011

Поскольку вы, по-видимому, используете подготовленные операторы, я бы рекомендовал использовать их в максимально возможной степени, чтобы вы могли избежать традиционных проблем, таких как внедрение SQL-кода (когда кто-то передает вредоносный код SQL в ваше приложение, его частично избегают путем очисткипользовательские вводы и / или использование связанных подготовленных операторов).

Кроме того, вам необходимо получить результаты вашего запроса, чтобы отобразить их (при условии, что это ваша цель).PHP имеет очень сильную документацию с хорошими примерами.Вот несколько ссылок: fetchAll ; подготовить ; bindParam .

Вот пример:

try
{
    $db = new PDO("mysql:host=$db_host;dbname=$db_name",
                  $db_user, $db_pass);
}
catch (PDOException $e)
{
    exit('Error connecting to database: ' . $e->getMessage());
}

$user = $_SESSION['user'];

$pickedyet = $db->prepare('SELECT game1 FROM user WHERE user = :user');
/* Bind the parameter :user using bindParam - no need for quotes */
$pickedyet->bindParam(':user', $user);
$pickedyet->execute();

/* fetchAll used for example, you may want to just fetch one row (see fetch) */
$results = $pickedyet->fetchAll(PDO::FETCH_ASSOC);

/* Dump the $results variable, which should be a multi-dimensional array */

var_dump($results);

EDIT - Я также предполагаю, что существует таблица с именем 'user'со столбцом с именем «user» и другим столбцом с именем «game1» (т. е. ваш SQL-оператор верен, кроме использования связанных параметров).

1 голос
/ 22 ноября 2011
<?php

session_start();

$db_user = 'example';
$db_pass = 'xxxxx';

try
{
    // nothing was wrong here - using braces is better since it remove any confusion as to what the variable name is
    $db=new PDO( "mysql:host={$db_host}dbname={$db_name}", $db_user, $db_pass);
}
catch ( Exception $e ) // catch all exceptions here just in case
{
    exit( "Error connecting to database: " . $e->getMessage() );
}

// this line is unecessary unless you're using it later.
//$user = $_SESSION["user"];


// no need for a new variable here, just send it directly to the prepare method
// $pickselect = '...';
// also, I changed it to a * to get the entire record.
$statement = $db->prepare( "SELECT * FROM user WHERE user=:user" );

// http://www.php.net/manual/en/pdostatement.bindvalue.php
$statement->bindValue( ':user', $_SESSION['user'], PDO::PARAM_STR );
$statement->execute();

// http://www.php.net/manual/en/pdostatement.fetch.php
// fetches an object representing the db row.
// PDO::FETCH_ASSOC is another possibility
$userRow = $statement->fetch( PDO::FETCH_OBJ );

var_dump( $userRow );

echo $userRow->game1;
0 голосов
/ 22 ноября 2011

Измените user=$user на user='$user'.Пожалуйста, обратите внимание на одинарные кавычки.

Более того, вы выполняете запрос $pickedyet->execute();, а затем делаете echo $pickselect;, который ничем не отличается от строки, содержащей запрос.

Маленькие подсказки:

  1. Вы должны получить результат выполнения запроса.
  2. Вы используете подготовленный оператор, который очень хорош, но вы не на самом деле используя их, потому что вы не делаете никакой привязки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...