ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

PHP准备好的语句->仅返回数据库列中的第一个字母

2019-11-21 17:33:05  阅读:187  来源: 互联网

标签:prepared-statement sql php


我有这个密码

        $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

解决方法:

这是我发现的.我认为原因是在tinytext类型中.因为当我使用数据库转储时,该错误会在本地PC上重现.但是,只要将列类型更改为varchar 255,代码就可以正常工作.

标签:prepared-statement,sql,php
来源: https://codeday.me/bug/20191121/2053345.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有