Pergunta

Olá, estou tocando com o STMT pela primeira vez (olhando para converter meu código depois de usar anteriormente o MySQLI funções por meio de uma classe de extensão.

No entanto, não consigo fazer funcionar. Estou usando o PHP 5.2.11 e o MySQL 4.1.22.

Eu tenho uma estrutura de tabela como sim:

CREATE TABLE IF NOT EXISTS `tags` (
  `tag_id` smallint(3) unsigned NOT NULL auto_increment,
  `title` varchar(32) NOT NULL default '',
  PRIMARY KEY  (`tag_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;

E aqui está o meu código, eu tenho usado http://devzone.zend.com/article/686 e php.net como referências.

$mysqli = new mysqli('***','***','***','***');

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$stmt = $mysqli->prepare("INSERT INTO tags (title) VALUES (?)");

$stmt->bind_param('s', $title);

$title = 'test 123';

$stmt->execute();

$stmt->close();

$mysqli->close();

Parece simples o suficiente e eu espero que insira "teste 123" na coluna de título com o incremento automático tag_id. Mas, em vez disso, o título está em branco (tag_id aumenta como se poderia assumir).

Alguém tem alguma idéia em que estou dando errado?

=================================================

Como a Atli apontou e testou, ele funciona na versão MySQL de 5 ou mais. Portanto, é provavelmente um problema em usar uma versão antiga do SQL, embora a documentação do Php.NET diga que o MySQLI "permite acessar a funcionalidade fornecida pelo MySQL 4.1 e acima".

Se alguém puder sugerir outra razão pela qual pode não estar funcionando ou como fazê -lo funcionar no meu ambiente, isso seria ótimo. Caso contrário, suponho que vou acompanhar minha própria extensão da aula do MySQLI para preparar e limpar consultas.

Foi útil?

Solução

Eu testei seu código no meu servidor de teste e funciona bem. (Usando o PHP 5.3 e o MySQL 5.1.37)
Portanto, não é o código em si ou o design do banco de dados.

Meu primeiro palpite seria alguma incompatibilidade com sua versão MySQL.
Você pode tentar usar o mysqli_stmt :: get_warnings função para ver se há algum aviso emitido.

Se for possível, eu recomendaria atualizar o MySQL. A versão que você está usando está ficando bastante antiga. - Eu ia instalar 4.1 e testá -lo (Só por diversão: P) Mas eles nem têm mais os downloads disponíveis.

Outras dicas

Defina o título $ antes de usá -lo. Você deve incluir esta linha

$title = 'test 123';

antes da

$stmt->bind_param('s', $title);

Código completo:

$mysqli = new mysqli('***','***','***','***');

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$title = 'test 123';

$stmt = $mysqli->prepare("INSERT INTO tags (title) VALUES (?)");

$stmt->bind_param('s', $title);

$stmt->execute();

$stmt->close();

$mysqli->close();

Ao invés de

$stmt->bind_param('s', $title);

Experimente isso:

$stmt->bindParam(1, $title, PDO::PARAM_STR);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top