Используйте PDO для проверки дубликатов данных

Я смотрел на другие вопросы по этому вопросу, но они не будут работать для меня.

Я хочу проверить, если пользователь уже вошел в систему, используя значение steamid, Если они есть, отобразите их информацию, если нет, создайте новую учетную запись в базе данных. Вот что у меня сейчас:

$dbh = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);

if($dbh){
echo "Connected successfully";
}
include ('steamauth/userInfo.php');
$stmt = $dbh->prepare("SELECT steam_id FROM user WHERE steam_id = :steam_id");
$stmt->bindParam(':steam_id', $steamprofile['steamid']);
$stmt->execute();

if($stmt->rowCount() > 0){
echo "User already exists!";
}else{

$sql = "INSERT INTO user (display_name, user_url, steam_id, profil_image)
VALUES ('$steamprofile[personaname]', '$steamprofile[profileurl]', $steamprofile[steamid]), '$steamprofile[avatar]'";

/*
if ($dbh->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $dbh->error;
}
*/
}

Начиная с этого кода, единственное возвращение «успешно установлено». Новые данные не добавляются в (пустую) базу данных пользователей.

Если я раскомментировал последний блок, я получаю вывод:

«Примечание: неопределенное свойство: PDO :: $ error in
F: \ Bitnami \ htdocs \ Dreamweaver \ freehtml5streets \ index.php в строке 48
Ошибка: INSERT INTO пользователь (display_name, user_url, steam_id,
profil_image) VALUES (// список соответствующих значений вошедших в систему
пользователь).

1

Решение

Вы получаете ошибку «Неопределенное свойство», потому что «ошибка» не определена как свойство $ dbh. Вы, вероятно, имели в виду «errorInfo» см. Вот

Кстати, создание оператора SQL с использованием необработанного ввода делает вас совершенно уязвимым для атаки SQL-инъекцией.

2

Другие решения

Исключение ошибки связано с тем, что исключение ошибки pdo возвращает массив getMessage, getCode и getFile, см. Ниже и пример его реализации.

public function __construct() {
try {
$this->mssql = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
} catch (PDOException $e) {
throw new CHttpException(404, 'Connection Error, Contact admin for assistance ' . $e);
/** You can access the error messages using $e->getMessage() for the exception error message. $->getCode() for the error code;  $e->getFile(); return the file path  **/
}
}

//From the exerpt of your code try this
include ('steamauth/userInfo.php');
if (!empty($steamprofile['steamid'])) {
$stmt = $dbh->prepare("SELECT count(*) from user WHERE steam_id = :steam_id");
$stmt->bindValue(':steam_id', $steamprofile['steamid']);
$stmt->execute();
$count = $stmt->fetchColumn();
}
//Row will return false if there was no value
if ($count == 0) {
//insert new data
$sql = "INSERT INTO user (display_name, user_url, steam_id, profil_image)
VALUES ('$steamprofile[personaname]', '$steamprofile[profileurl]', $steamprofile[steamid]), '$steamprofile[avatar]'";
} else {
//User exist
}
2

По вопросам рекламы [email protected]