Не работает функция PDO

384
07 сентября 2017, 19:44

До определенного момента все работало, после того, как сделал условия, перестало :с Ошибок не выдает, но с базой ничего не делает ни в одном из вариантов.

    function addToDB($funcSteamId, $funcSteamVisits, $funcSteamFavs) {
$connection = new PDO('mysql:host=localhost;dbname=dev', 'root', 'root');
$query = $connection->prepare("SELECT COUNT(steamID) FROM guidesStats WHERE steamID=:inputID");
$query->execute(array(':inputID' => $funcSteamId));
$result = $query->fetchAll();
if ($result[0][0] == 1) {
    echo "Запись с таким steamID уже существует, обновляю данные...";
    $affectedRows = $connection->prepare('INSERT INTO guidesStats WHERE steamID=:inputID (visitors,favs) VALUES (:inputVisits, :inputFavs)');
    $affectedRows->execute(array(':inputID' => $funcSteamId, ':inputVisits' => $funcSteamVisits, ':inputFavs' => $funcSteamFavs));
}
if ($result[0][0] < 1) {
    $affectedRows = $connection->exec('INSERT INTO guidesStats (steamID,visitors,favs) VALUES (' . $funcSteamId . ',' . $funcSteamVisits . ',' . $funcSteamFavs . ')');
    echo "Добавлена запись в БД";
}
if ($result[0][0] > 1) {
    echo "В БД >1 записи";
}
return 0;
}

Примеры var_dump($result):

Для $funcSteamId = 1

       array(1) { [0]=> array(2) { ["COUNT(steamID)"]=> string(1) "3" [0]=> string(1) "3" } }

Для $funcSteamId = 7

    array(1) { [0]=> array(2) { ["COUNT(steamID)"]=> string(1) "0" [0]=> string(1) "0" } }

Для $funcSteamId = 1120193385

    array(1) { [0]=> array(2) { ["COUNT(steamID)"]=> string(1) "1" [0]=> string(1) "1" } }

Вот так выглядит моя БД:

Answer 1

Попробуйте переписать обращения к базе в усовиях по примеру до условий. В 2 шага prepare и execute. Можно добавить try для поимки ошибок.

$zapros = 'INSERT INTO DB ($value[0], $value[1]) VALUES';
try {
$var = $connection->prepare($zapros);
$var->bindValue (0, $value[0])
$var->bindValue (1, $value[1])
$var->execute();
} catch (Exception $e) {
echo "Запрос не очень..";
   $error_output = $connection->errorInfo();
//либо trigger_error('Wrong SQL: ' . $connection. ' Error: ' . $e->getMessage(), E_USER_ERROR);
};
if(isset($error_output)) print_r($error_output);

если не секрет, то зачем в конце return false? Если ничего не нужно возвращать, то можно удалить строку return целиком. Если есть возможность, для теста, попробуйте этот же код только без переменных, просто напишите запрос текстом и посмотрите на результат, если заработает, то добавите переменные.

правка

Вместо

$query = $connection->prepare("SELECT COUNT(steamID) FROM guidesStats WHERE steamID=:inputID");

уберите COUNT

$query = $connection->prepare("SELECT steamID FROM guidesStats WHERE steamID=:inputID");
Answer 2

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

READ ALSO
Почему не работает синтаксис PHP в PHPStorm?

Почему не работает синтаксис PHP в PHPStorm?

Ребят, приветНе могу разобраться в проблеме PhpStorm

375
Дописать строку в конец ячейки (PHP MYSQL)

Дописать строку в конец ячейки (PHP MYSQL)

Есть цикл ForeachОн добавляет строку в ячейку (в БД) Сам запрос лежит в цикле

299
Как считать данные в переменные из БД (PDO)

Как считать данные в переменные из БД (PDO)

Есть бд, которая выглядит так:

377
Открыть пост на родительской странице с изменением url

Открыть пост на родительской странице с изменением url

Имеется родительская страница на которой выводятся посты 'post_type' => 'employee' содержащие часть информации из поста (фото + имя)

209