PDO: база данных сообщает об ошибке: SQLSTATE [HY000]: общая ошибка: 2031 [дубликат]

Я опробовал решение font-size: 0 для аналогичной проблемы в React и Sass для проекта Free Code Camp, над которым я сейчас работаю.

И он работает!

Сначала скрипт:

var ActionBox = React.createClass({
    render: function() {
        return(
            
); }, }); var ApplicationGrid = React.createClass({ render: function() { var row = []; for(var j=0; j<30; j++){ for(var i=0; i<30; i++){ row.push(); } } return(
{row}
); }, }); var ButtonsAndGrid = React.createClass({ render: function() { return(
); }, }); var MyApp = React.createClass({ render: function() { return(

Game of Life!

); }, }); ReactDOM.render( , document.getElementById('GoL') );

Затем Sass:

html, body
    height: 100%

body
    height: 100%
    margin: 0
    padding: 0

#mainDiv
    width: 80%
    height: 60%
    margin: auto
    padding-top: 5px
    padding-bottom: 5px
    background-color: DeepSkyBlue
    text-align: center
    border: 2px solid #381F0B
    border-radius: 4px
    margin-top: 20px

#buttonsDiv
    width: 80%
    height: 60%
    margin: auto
    margin-bottom: 0px
    padding-top: 5px
    padding-bottom: 0px
    background-color: grey
    text-align: center
    border: 2px solid #381F0B
    border-radius: 4px
    margin-top: 20px

#applicationGrid
    width: 65%
    height: 50%
    padding-top: 0px
    margin: auto
    font-size: 0
    margin-top: 0px
    padding-bottom: 5px
    background-color: white
    text-align: center
    border: 2px solid #381F0B
    border-radius: 4px
    margin-top: 20px

#actionBox
    width: 20px
    height: 20PX
    padding-top: 0px
    display: inline-block
    margin-top: 0px
    padding-bottom: 0px
    background-color: lightgrey
    text-align: center
    border: 2px solid grey
    margin-bottom: 0px

17
задан silkfire 24 June 2013 в 12:50
поделиться

7 ответов

Вы не можете использовать ->bind* и ->execute($params). Используйте либо или; если вы передадите параметры в execute(), они заставят PDO забыть параметры, уже связанные через ->bind*.

17
ответ дан deceze 26 August 2018 в 18:22
поделиться

Из руководство :

public bool PDOStatement::execute ([ array $input_parameters ] )

Выполнить подготовленный оператор. Если подготовленный оператор включил маркеры параметров, вы должны либо:

  • вызвать PDOStatement :: bindParam (), чтобы привязать переменные PHP к маркерам параметров: связанные переменные передают их значение в качестве входных данных и получают выходное значение , если они есть, связанных с ними маркеров параметров
  • или передать массив значений только для ввода

Вам нужно выбрать метод. Вы не можете смешивать оба.

3
ответ дан Álvaro González 26 August 2018 в 18:22
поделиться

Это исключение также появляется, если вы пытаетесь выполнить запрос с помощью заполнителей вместо того, чтобы готовить статут, такой как

$stmt = $db->query('SELECT * FROM tbl WHERE ID > ?');

вместо

$stmt = $db->prepare('SELECT * FROM tbl WHERE ID > ?');
4
ответ дан AbcAeffchen 26 August 2018 в 18:22
поделиться

Это происходит, если у вас есть несоответствующие параметры. Например:

$q = $db->prepare("select :a, :b");
$q->execute([":a"=>"a"]);
0
ответ дан Charlie 26 August 2018 в 18:22
поделиться

Это не совсем ответ, но эта ошибка также возникает, если вы пытаетесь использовать слово с дефисом в качестве заполнителей, например:

$sth->bindValue(':page-1', $page1);

. Поэтому лучше использовать

$sth->bindValue(':page_1', $page1);

2
ответ дан Martin Schilliger 26 August 2018 в 18:22
поделиться

Эта же ошибка 2031 может быть выдана при связывании двух значений с тем же именем параметра, что и в:

  • $sth->bindValue(':colour', 'blue');
  • $sth->bindValue(':colour', 'red');

.. так что будьте осторожны.

18
ответ дан Mi-Creativity 26 August 2018 в 18:22
поделиться

Исключение также происходит (по крайней мере, в MySQL / PDO), когда ваш SQL пытается ОБНОВИТЬ поле AUTO_INCREMENT.

-1
ответ дан Roadowl 26 August 2018 в 18:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: