【发布时间】:2014-06-07 15:43:54
【问题描述】:
我有这个代码
$sql = "SELECT name FROM data WHERE id=? LIMIT 0,1";
//prepares statement
$stmt = self::getConnection()->prepare($sql);
$stmt->bind_param("i", $id);
$ids = array(1,2,3);
foreach ($ids as $key => $id) {
$stmt->execute();
$stmt->bind_result($name);
$stmt->fetch();
$stmt->store_result();
var_dump($name);
}
我的数据库表是这样的
id | name
1 | First Name
2 | Second Name
3 | Third Name
现在输出如下所示:
string(10) "First Name"
string(1) "S"
string(1) "T"
名字是正确的。但随后它只输出以下行的第一个字母。我不知道为什么。 我用另一个整数类型的列进行了尝试。那行得通。只是这个字符串类型的列没有。
我还尝试将$ids-Array 更改为:$ids = array(2,3,1)。然后输出
string(11) "Second Name"
string(1) "T"
string(1) "F"
我不知道该怎么做。有人看到我的错误吗?
编辑:
PHP 5.5 和 Mysql 5.5.31 和 var_dump:
编辑 2:
-- phpMyAdmin SQL Dump
-- version 4.0.5
-- http://www.phpmyadmin.net
--
-- Host: rdbms
-- Erstellungszeit: 07. Jun 2014 um 19:21
-- Server Version: 5.5.31-log
-- PHP-Version: 5.3.27
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Datenbank: `DB1673555`
--
-- --------------------------------------------------------
CREATE TABLE IF NOT EXISTS `data` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` tinytext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
INSERT INTO `data` (`id`, `name`) VALUES
(1, 'First Name'),
(2, 'Second Name'),
(3, 'Third Name');
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
我刚刚看到转储说我使用的是 PHP 5.3。但是在strato的网站上他们说5.5
【问题讨论】:
-
不用
store_result试试看。 -
非常有趣的错误。我试图在本地复制所有内容,一切正常。你能告诉我你的数据库转储和 PHP 和 MySQL 版本吗?
-
store_result不起作用。我更新了问题 -
嗯,PHP和MySQL的版本和我的一样。但我要求 MySQL 转储具有结构的表。我想看看数据类型和字符编码。对于创建转储,您可以使用
PHPMyAdmin或Adminer。 -
抱歉,您以为您指的是数据库对象。我再次更新了问题
标签: php sql prepared-statement