• 关于

    pdo对象

    的搜索结果

问题

CANopen通信之PDO通信

CANopen通信之PDO通信http://www.bieryun.com/1551.html 过程数据对象(Process Data Object,PDO)是用来传输实时数据的,提供对设备应用对象的直接访问通道...
优惠券发放 2019-12-01 21:39:32 3549 浏览量 回答数 0

回答

错误模式说明:异常模式:$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);这个模式需要配合 try 使用 :一旦出错,就会: 创建一个对象,$e 也可以随便命名,从 $e->getMessage() 获取错误信息;采取动作;try{ 要执行的命令... }catch(PDOException $e){ echo "执行命令失败:".$e->getMessage(); 失败后的动作... }这个其实等于 缺省模式的 if($pdo->errorInfo()[2]) ... 创建PDO的时候,为什么也用 try?因为这时候连PDO对象都没有,所以也不能设置错误模式,所以可以用try,一旦PDO创建成功,错误模式就成了 缺省模式,也就不能用try了. 缺省模式:$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); 这个出错,会给 $pdo->errorCode() 和 $pdo->errorInfo()[2] 赋值; 可以用 if($pdo->errorInfo()[2])和if($pdo->errorCode()) 判断脚本是不是出错. 如果不出错,上面都是空的; 警告模式:$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 这个会echo出一个错误信息,打乱了脚本;学习调试的时候使用比较好;真用起来的时候,很多时候判断不出到底脚本有没有出错;
a123456678 2019-12-02 03:03:20 0 浏览量 回答数 0

回答

使用$link = null让PDO知道它可以关闭连接。 PHP:PDO连接和连接管理 成功连接到数据库后,PDO类的实例将返回到您的脚本。该连接在该PDO对象的生存期内保持活动状态。要关闭连接,您需要通过确保删除所有剩余的对该对象的引用来销毁该对象,方法是将NULL赋给保存该对象的变量。如果您未明确执行此操作,则脚本结束时PHP将自动关闭连接。来源:stack overflow
保持可爱mmm 2020-05-17 21:37:16 0 浏览量 回答数 0

万券齐发助力企业上云,爆款产品低至2.2折起!

限量神券最高减1000,抢完即止!云服务器ECS新用户首购低至0.95折!

回答

PDO是PDO, Mysqli是Mysqli,我们没办法要求PDO像Mysqli保持一样的结构和设计。也许你会觉得mysqli的fetch_field很方便,但是实际上这个方法的使用概率极低,因为通常会读出表的所有字段信息并缓存起来,而不是总是进行字段查询。表现最明显的框架如Cakephp,当你用直接编辑数据表的方法增加了一个新字段之后数据并不会被保存到这个字段中,必须先清除缓存的数据表信息才行。通过阅读不同的PHP框架,我们可以发现极少会有框架需要开发人员直接调用PDO或者mysqli对象去执行sql,它们往往将其通过DbAdapter之类的接口进行封装。我建议你思考这样做的好处然后优化自己的代码结构。你问题中的这个行为通常也不需要封装在db对象中,一般是在Table对象处理,例如class Table { protected $_tableName; public function __construct($tableName); protected function _readFieldsPrototype(); protected function _getCachedFieldsPrototype(); public function getFieldPrototype($filed); }仅供参考。
a123456678 2019-12-02 03:03:18 0 浏览量 回答数 0

问题

PDO :: fetchAll与PDO :: fetch在循环中

只是一个简单的问题。 在循环中使用PDO :: fetchAll()和PDO :: fetch()是否有性能差异(对于大型结果集)? 我正...
保持可爱mmm 2020-05-11 16:40:23 0 浏览量 回答数 1

回答

PHP连接数据库有三中常见的方式:1、mysql:$conn = mysql_connect(主机名,用户名,密码) 关闭:close($conn)(已经不推荐使用)2、mysqli:mysql 的升级版,支持面向对象和过程两种方式,分别如下:$conn1 = mysqli_connect(主机名,用户名,密码),mysqli_close($conn1)用于关闭连接$conn2 = new mysqli(主机名,用户名,密码),用$conn2->close()关闭连接现在php5一般都支持mysqli扩展,若不支持,则需要开启3、PDO:PHP还支持PDO连接`mysql,$pdo=new PDO("mysql:host=localhost;dbname=db_demo","用户名","密码");$pdo=null`能关闭连接
小旋风柴进 2019-12-02 01:59:57 0 浏览量 回答数 0

回答

PDO 是官方推荐的,更为通用的数据库访问方式,如果你没有特殊需求,那么你最好学习和使用 PDO.但如果你需要使用 MySQL 所特有的高级功能,那么你可能需要尝试一下 MySQLi, 因为 PDO 为了能够同时在多种数据库上使用,不会包含那些 MySQL 独有的功能。MySQLi 是 MySQL 的增强接口,同时提供面向过程和面向对象接口,也是目前推荐的 MySQL 驱动,旧的C风格 MySQL 接口将会在今后被默认关闭。
西秦说云 2019-12-02 01:33:16 0 浏览量 回答数 0

问题

PDO字段类型影响索引的使用吗

我的数据库里有有一个int型字段,created,存的是10位整数,是个时间戳,建了索引。在查询的时候,我这么写$sql = 'SELECT * FROM products WHERE created > :created ORDER...
蛮大人123 2019-12-01 19:51:46 1169 浏览量 回答数 1

回答

PDO是不支持这种绑定的,但是可以通过第三方的Class来实现,这个是我做的一个PDO Class,可以实现安全的WHERE IN,而且使用也方便。使用方法也很简单,先new一个对象然后即可
落地花开啦 2019-12-02 02:42:52 0 浏览量 回答数 0

问题

php 用pdo 连接mysql 服务器后,还需要断开服务器吗?

以前学习用 $mysqli对象链接服务器后,查询完了需要断开服务器$mysqli->close(); 想问问pdo 还需要断开吗?如果需要,怎么写?...
a123456678 2019-12-01 20:16:41 1426 浏览量 回答数 1

回答

我假设您的意思是您想要最终的SQL查询,并将参数值插入其中。我知道这对调试很有用,但是它不是准备好的语句的工作方式。参数不会在客户端与预准备的语句组合,因此PDO绝对不能访问与其参数组合的查询字符串。 当您执行prepare()时,SQL语句将发送到数据库服务器,而当您执行execute()时,将分别发送参数。MySQL的常规查询日志的确显示了最终SQL,其中包含在execute()之后插入的值。以下是我的一般查询日志的摘录。我从mysql CLI(不是从PDO)运行查询,但是原理是相同的。 081016 16:51:28 2 Query prepare s1 from 'select * from foo where i = ?' 2 Prepare [2] select * from foo where i = ? 081016 16:51:39 2 Query set @a =1 081016 16:51:47 2 Query execute s1 using @a 2 Execute [2] select * from foo where i = 1 如果您设置PDO属性PDO :: ATTR_EMULATE_PREPARES,则也可以获得所需的内容。在这种模式下,PDO将参数插值到SQL查询中,并在您执行execute()时发送整个查询。 这不是真正的准备查询。 通过在execute()之前将变量插值到SQL字符串中,可以避免准备查询的好处。 来自@afilina的评论: 否,文本SQL查询在执行期间不会与参数组合。因此,PDO没有任何东西可以向您显示。 在内部,如果您使用PDO :: ATTR_EMULATE_PREPARES,则PDO会在执行准备和执行之前复制SQL查询并向其中插入参数值。但是PDO不会公开此修改后的SQL查询。 PDOStatement对象具有属性$ queryString,但这仅在PDOStatement的构造函数中设置,并且在用参数重写查询时不会更新该属性。 对于PDO来说,要求他们公开重写的查询将是合理的功能请求。但是,除非您使用PDO :: ATTR_EMULATE_PREPARES,否则即使那样也不会给您“完整”的查询。 这就是为什么我显示了上面使用MySQL服务器的常规查询日志的解决方法的原因,因为在这种情况下,即使是带有参数占位符的准备好的查询也会在服务器上重写,并将参数值回填到查询字符串中。但这仅在日志记录期间完成,而不在查询执行期间完成。来源:stack overflow
保持可爱mmm 2020-05-10 18:58:00 0 浏览量 回答数 0

问题

MySQL错误2014的原因其他未缓冲的查询处于活动状态时无法执行查询

我的服务器运行CentOS 6.4,并使用yum和CentOS的存储库安装MySQL 5.1.69,以及使用yum和ius的存储库安装的PHP 5.4.16。Edit3升级到MySQL服务器版本:5...
保持可爱mmm 2020-05-13 13:47:08 0 浏览量 回答数 1

回答

您选择像这样的数据: $db = new PDO("..."); $statement = $db->prepare("select id from some_table where name = :name"); $statement->execute(array(':name' => "Jimbo")); $row = $statement->fetch(); // Use fetchAll() if you want all results, or just iterate over the statement, since it implements Iterator 您以相同的方式插入: $statement = $db->prepare("insert into some_other_table (some_id) values (:some_id)"); $statement->execute(array(':some_id' => $row['id'])); 我建议您将PDO配置为在出错时引发异常。PDOException如果任何查询失败,您将得到一个-无需显式检查。要打开异常,请在创建$db对象后立即调用此方法: $db = new PDO("..."); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);来源:stack overflow
保持可爱mmm 2020-05-11 16:18:59 0 浏览量 回答数 0

回答

要回答您的问题: MySQL> = 5.1.17(或PREPAREand EXECUTE语句为> = 5.1.21 )可以在查询缓存中使用准备好的语句。因此,您的MySQL + PHP版本可以在查询缓存中使用准备好的语句。但是,请注意MySQL文档中有关缓存查询结果的注意事项。存在许多无法缓存的查询或即使被缓存也无用的查询。以我的经验,无论如何,查询缓存通常不是一个很大的胜利。查询和模式需要特殊的构造才能最大程度地利用缓存。从长远来看,经常需要结束应用程序级缓存。 本机准备对于安全性没有任何影响。伪准备的语句仍将转义查询参数值,它将仅在带有字符串的PDO库中完成,而不是在使用二进制协议的MySQL服务器上完成。换句话说,无论您的EMULATE_PREPARES设置如何,相同的PDO代码都同样容易受到(或不受攻击)注入攻击。唯一的区别是参数替换发生的位置-使用EMULATE_PREPARES,它发生在PDO库中;没有EMULATE_PREPARES,它发生在MySQL服务器上。 如果没有,EMULATE_PREPARES您可能会在准备时而不是执行时得到语法错误;与EMULATE_PREPARES您一起只会在执行时收到语法错误,因为PDO直到执行时才向MySQL提供查询。请注意,这会影响您将编写的代码!特别是如果您正在使用PDO::ERRMODE_EXCEPTION! 附加注意事项: prepare()(使用本机预处理语句)的成本是固定的,因此prepare();execute()使用本机预处理语句的速度可能比使用模拟的预备语句发布纯文本查询要慢一些。在许多数据库系统上,a的查询计划也prepare()被缓存,并且可以与多个连接共享,但是我认为MySQL不会这样做。因此,如果不将准备好的语句对象用于多个查询,则整体执行速度可能会变慢。 作为最后的建议,我认为对于旧版本的MySQL + PHP,您应该模拟准备好的语句,但是对于最近的版本,您应该关闭模拟。 在编写了一些使用PDO的应用程序之后,我做了一个PDO连接功能,该功能我认为是最佳设置。您可能应该使用类似的方法或调整您的首选设置: /** * Return PDO handle for a MySQL connection using supplied settings * * Tries to do the right thing with different php and mysql versions. * * @param array $settings with keys: host, port, unix_socket, dbname, charset, user, pass. Some may be omitted or NULL. * @return PDO * @author Francis Avila */ function connect_PDO($settings) { $emulate_prepares_below_version = '5.1.17'; $dsndefaults = array_fill_keys(array('host', 'port', 'unix_socket', 'dbname', 'charset'), null); $dsnarr = array_intersect_key($settings, $dsndefaults); $dsnarr += $dsndefaults; // connection options I like $options = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ); // connection charset handling for old php versions if ($dsnarr['charset'] and version_compare(PHP_VERSION, '5.3.6', '<')) { $options[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES '.$dsnarr['charset']; } $dsnpairs = array(); foreach ($dsnarr as $k => $v) { if ($v===null) continue; $dsnpairs[] = "{$k}={$v}"; } $dsn = 'mysql:'.implode(';', $dsnpairs); $dbh = new PDO($dsn, $settings['user'], $settings['pass'], $options); // Set prepared statement emulation depending on server version $serverversion = $dbh->getAttribute(PDO::ATTR_SERVER_VERSION); $emulate_prepares = (version_compare($serverversion, $emulate_prepares_below_version, '<')); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, $emulate_prepares); return $dbh; } 分享来源:stack overflow
保持可爱mmm 2020-05-10 19:37:11 0 浏览量 回答数 0

问题

ECS上连接localhost的MySQL需要1秒钟

如标题,想了解了解这情况是不是算正常。 在家里PC上,连接localhost的MySQL大概只需要百分之几秒。 我看别的帖子说ECS把数据保存好几份,所以IO性能不高。再或者是因为数据实际是...
老萝卜 2019-12-01 21:33:31 4625 浏览量 回答数 0

回答

好吧,您可以与面向对象方面,准备好的语句,它成为标准的事实等进行争论。但是我知道,在大多数情况下,说服某人使用杀手级功能会更好。就是这样: 使用PDO的真正好处是您可以获取数据,并将其自动注入到对象中。如果您不想使用ORM(因为这只是一个快速的脚本),但是您确实喜欢对象映射,那真的很酷: class Student { public $id; public $first_name; public $last_name public function getFullName() { return $this->first_name.' '.$this->last_name } } try { $dbh = new PDO("mysql:host=$hostname;dbname=school", $username, $password) $stmt = $dbh->query("SELECT * FROM students"); /* MAGIC HAPPENS HERE */ $stmt->setFetchMode(PDO::FETCH_INTO, new Student); foreach($stmt as $student) { echo $student->getFullName().'<br />'; } $dbh = null; } catch(PDOException $e) { echo $e->getMessage(); }
保持可爱mmm 2019-12-02 03:15:22 0 浏览量 回答数 0

回答

检查手册mysql_fetch_object()。它返回一个对象,而不是对象数组。 我猜你想要这样的东西 $results = mysql_query("SELECT * FROM sidemenu WHERE menu_id='".$menu."' ORDER BY id ASC LIMIT 1", $con); $sidemenus = array(); while ($sidemenu = mysql_fetch_object($results)) { $sidemenus[] = $sidemenu; } 可能我建议您看看PDO。PDOStatement::fetchAll(PDO::FETCH_OBJ)做你mysql_fetch_object()想做的事 来源:stack overflow
保持可爱mmm 2020-05-13 14:01:27 0 浏览量 回答数 0

回答

好吧,您可以与面向对象方面,准备好的语句,它成为标准的事实等进行争论。但是我知道,在大多数情况下,说服某人使用杀手级功能会更好。就是这样: 使用PDO的真正好处是您可以获取数据,并将其自动注入到对象中。如果您不想使用ORM(因为这只是一个快速的脚本),但是您确实喜欢对象映射,那真的很酷: class Student { public $id; public $first_name; public $last_name public function getFullName() { return $this->first_name.' '.$this->last_name } } try { $dbh = new PDO("mysql:host=$hostname;dbname=school", $username, $password) $stmt = $dbh->query("SELECT * FROM students"); /* MAGIC HAPPENS HERE */ $stmt->setFetchMode(PDO::FETCH_INTO, new Student); foreach($stmt as $student) { echo $student->getFullName().'<br />'; } $dbh = null; } catch(PDOException $e) { echo $e->getMessage(); }来源:stack overflow
保持可爱mmm 2020-05-08 11:31:24 0 浏览量 回答数 0

问题

通过准备好的语句使用INSERT INTO进行PDO

在穿越PHP:数据对象的丛林中,我遇到了通过准备好的语句执行MySQL查询的问题。 观察以下代码: $dbhost = "localhost"; $dbname =...
保持可爱mmm 2020-05-13 13:59:31 1 浏览量 回答数 1

回答

pdo :: prepare()文档上有两个很好的例子。 我将它们包括在这里,并简化了它们。 这个使用?参数。$dbh基本上是一个PDO对象。而您正在做的是分别将值150和'red'放入第一个和第二个问号。 /* Execute a prepared statement by passing an array of values */ $sth = $dbh->prepare('SELECT name, colour, calories FROM fruit WHERE calories < ? AND colour = ?'); $sth->execute(array(150, 'red')); $red = $sth->fetchAll(); 这个使用命名参数,并且有点复杂。 /* Execute a prepared statement by passing an array of values */ $sql = 'SELECT name, colour, calories FROM fruit WHERE calories < :calories AND colour = :colour'; $sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); $sth->execute(array(':calories' => 150, ':colour' => 'red')); $red = $sth->fetchAll();来源:stack overflow
保持可爱mmm 2020-05-10 18:59:26 0 浏览量 回答数 0

回答

“不幸的是,我不能使用mysqli lib,因为pdo_mysql有太多可用的适配器。” 您正在使用旧的MySQL扩展(“ mysql_connect”),该扩展已不再开发(仅维护)。由于您使用的是PHP 5,因此您可能要使用MySQLi(MySQL 改进的扩展)。除其他外,它具有面向对象的界面,支持准备/多个语句,并具有增强的调试功能。您可以在此处阅读有关转换为MySQLi的更多信息;更多关于mysqli类本身的信息。 以下是一些示例代码,可以帮助您入门: ssl_set('/etc/mysql/ssl/client-key.pem', '/etc/mysql/ssl/client-cert.pem', '/etc/mysql/ssl/ca-cert.pem', NULL, NULL); $link = mysqli_real_connect ($db, 'ip', 'user', 'pass', 'db', 3306, NULL, MYSQLI_CLIENT_SSL); if (!$link) { die ('Connect error (' . mysqli_connect_errno() . '): ' . mysqli_connect_error() . "\n"); } else { $res = $db->query('SHOW TABLES;'); print_r ($res); $db->close(); } ?> 如果确实需要PDO_MYSQL,则需要执行以下操作: '/etc/mysql/ssl/client-key.pem', PDO::MYSQL_ATTR_SSL_CERT=>'/etc/mysql/ssl/client-cert.pem', PDO::MYSQL_ATTR_SSL_CA =>'/etc/mysql/ssl/ca-cert.pem' ) ); $statement = $pdo->query("SHOW TABLES;"); $row = $statement->fetch(PDO::FETCH_ASSOC); echo htmlentities($row['_message']); ?> 但是,只有最新版本的PHP具有对PDO的SSL支持,并且(至少)在版本5.3.8中默认忽略了SSL选项:请参阅错误报告。 祝好运!来源:stack overflow
保持可爱mmm 2020-05-17 14:03:38 0 浏览量 回答数 0

回答

你重载了wakeup()这一个方法。在你的conn.php这一个里面把wakeup()方法删掉。或者是重命名。 英文很清楚啊 不可以重写final方法PDO::__wakeup() final的方法不能重写,而且PDO对象似乎序列化也没用,wakeup做啥呢哈哈,我也是会,写单例模式还要处理__clone,__sleep,__wakeup方法要显得高端。。你懂吧?重载这么高端的用法显示档次。。你看我从来都不懂。。 我靠,你们全在这里跟我扯淡…蛋疼的时候扯淡
爱吃鱼的程序员 2020-06-22 18:31:18 0 浏览量 回答数 0

问题

在课堂上使用PDO?mysql

我有一些类可以执行一些MySQL查询和准备好的语句。但是,我不知道如何在这些类中合并我的PDO对象。例如,我想做这样的事情: dbh->prepare('SELECT * FROM ...
保持可爱mmm 2020-05-17 20:51:36 1 浏览量 回答数 1

回答

在基本级别上,mysql,mysqli和PDO扩展都回答了如何与数据库对话的问题?它们都提供了连接数据库以及从数据库发送和检索数据的功能。您可以同时使用它们,一次建立到数据库的多个连接,但这通常是胡说八道。 mysql *是一个非常简单的扩展,基本上可以让您连接到数据库,向其发送SQL查询,而没有太多其他事情。 mysqli通过添加参数化查询和其他一些东西来改善这一点(顾名思义)。 PDO是将多个数据库驱动程序抽象到一个包中的扩展,即它允许您使用相同的代码连接到MySQL,Oracle,MS SQL Server和许多其他数据库,而无需使用特定于数据库的扩展或在需要时重写代码您切换数据库(至少在理论上)。它还支持参数化查询。 如果您知道将专门使用MySQL,那么mysqli是一个不错的选择。特别是因为您可以按程序方式使用它,所以您已经习惯了mysql扩展。如果您不熟悉OOP,那会很有帮助。否则,PDO是一个不错的面向对象的灵活数据库连接器。 *请注意,现在不建议使用 mysql扩展名,以后将在某个时候删除它。这是因为它是古老的,充满了不良做法,并且缺乏一些现代功能。不要用它来编写新代码。来源:stack overflow
保持可爱mmm 2020-05-17 18:03:38 0 浏览量 回答数 0

回答

与mysql_ *函数相比,PDO具有以下优点: 它是跨数据库的,这意味着它是用于不同关系数据库的相同接口。 它有助于防止SQL注入。 它更加干净(使用面向对象的方法)。来源:stack overflow
保持可爱mmm 2020-05-13 14:33:56 0 浏览量 回答数 0

回答

您在这里混的API,mysql_*并且mysqli_*不混合。您应该坚持使用mysqli_(无论如何看起来还是这样),因为mysql_*不赞成使用函数,并且在PHP7中将其完全删除了。 您的实际问题是某个地方的字符集问题。这里有一些指针可以帮助您为应用程序获取正确的字符集。这涵盖了开发PHP / MySQL应用程序时可能会遇到的大多数一般问题。 您整个应用程序中的所有属性都必须设置为UTF-8 将文档另存为UTF-8(不带BOM)(如果您使用的是Notepad ++,则为Format-> Convert to UTF-8 w/o BOM) PHP和HTML中的标头都应设置为UTF-8 HTML(内部标签): PHP(在文件顶部,在任何输出之前): header('Content-Type: text/html; charset=utf-8'); 连接到数据库后,将连接对象的字符集设置为UTF-8,如下所示(直接在连接之后) mysqli_set_charset($conn, "utf8"); /* Procedural approach / $conn->set_charset("utf8"); / Object-oriented approach / 这是针对的mysqli_,还有与mysql_*和PDO 类似的(请参见此答案的底部)。 还要确保将数据库和表设置为UTF-8,您可以像这样进行操作: ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; (任何已存储的数据都不会转换为正确的字符集,因此您需要使用干净的数据库来执行此操作,如果字符损坏则需要在执行此操作后更新数据)。 如果使用json_encode(),则可能需要应用该JSON_UNESCAPED_UNICODE标志,否则它将特殊字符转换为等效的十六进制字符。 请记住,一切的代码需要被设置为UFT-8的整条管线,否则你可能在你的应用体验破字。 除了此列表之外,可能还有一些具有用于指定字符集的特定参数的函数。手册将告诉您这一点(例如htmlspecialchars())。 还有一些针对多字节字符的特殊功能,例如:strtolower()不会降低多字节字符,因为您必须使用它mb_strtolower(),请参见此实时演示。 注1:请注意,其某处标记为utf-8(带破折号),某处标记为(无破折号utf8)。重要的是要知道什么时候使用,因为它们通常是不可互换的。例如,HTML和PHP需要utf-8,而MySQL则不需要。 注2:在MySQL中,“字符集”和“排序规则”不是同一回事,请参见编码和排序规则之间的区别?。两者都应设置为utf-8;通常排序规则应为utf8_general_ci或utf8_unicode_ci,请参见UTF-8:常规?斌吗 Unicode?。 注意3:如果您使用表情符号,则需要在数据库和连接中使用utf8mb4字符集而不是standard 来指定MySQL utf8。HTML和PHP将只有UTF-8。 使用mysql_和PDO 设置UTF-8 PDO:这是在对象的DSN中完成的。注意该charset属性, $pdo = new PDO("mysql:host=localhost;dbname=database;charset=utf8", "user", "pass"); mysql_:这样做非常类似于mysqli_*,但是它没有将连接对象作为第一个参数。 mysql_set_charset('utf8');来源:stack overflow
保持可爱mmm 2020-05-10 18:27:33 0 浏览量 回答数 0

回答

$this->_oDb 就是个PDO对象 <spanstyle="line-height:1.5;font-size:10pt;">检查一下SQL语句是否正确。 <spanstyle="line-height:1.5;font-size:10pt;">echo<spanstyle="font-size:10pt;font-family:Consolas,'BitstreamVeraSansMono','CourierNew',Courier,monospace;line-height:14.666666030883789px;background-color:#FFFFFF;"> <spanstyle="line-height:1.5;font-size:10pt;">"x".$result->rowCount()."y";<spanstyle="line-height:1.5;font-size:10pt;"> 改成  <spanstyle="font-size:10pt;line-height:1.5;">echo<spanstyle="font-size:10pt;font-family:Consolas,'BitstreamVeraSansMono','CourierNew',Courier,monospace;line-height:14.666666030883789px;background-color:#FFFFFF;"> <spanstyle="font-size:10pt;line-height:1.5;">"x".$result->lastInsertId()."y";<spanstyle="font-size:10pt;line-height:1.5;"> 试下<divclass="ref"> 引用来自“lazyphp”的答案<divclass=ref_body> <spanstyle="line-height:1.5;font-size:10pt;">检查一下SQL语句是否正确。 <spanstyle="line-height:1.5;font-size:10pt;">echo<spanstyle="font-size:10pt;font-family:Consolas,'BitstreamVeraSansMono','CourierNew',Courier,monospace;line-height:14.666666030883789px;background-color:#FFFFFF;"> <spanstyle="line-height:1.5;font-size:10pt;">"x".$result->rowCount()."y";<spanstyle="line-height:1.5;font-size:10pt;"> 改成  <spanstyle="font-size:10pt;line-height:1.5;">echo<spanstyle="font-size:10pt;font-family:Consolas,'BitstreamVeraSansMono','CourierNew',Courier,monospace;line-height:14.666666030883789px;background-color:#FFFFFF;"> <spanstyle="font-size:10pt;line-height:1.5;">"x".$result->lastInsertId()."y";<spanstyle="font-size:10pt;line-height:1.5;"> 试下回复<aclass='referer'target='_blank'>@Solowave:先将语句转换为最原始的SQL。确保执行没错了,在转换回PDO的占位符。我学PDO时,也遇过这种情况,我都是这样调试的。回复<aclass='referer'target='_blank'>@lazyphp:pdo我不会调试。。。。先检查确保SQL语句是否正常 判断一下$result->execute();是否执行成功。aopt数组有数据吗?那会不会是prepare没有返回的情况,试试绑定用thisodb这个,而不是返回那个求助正文里最下面打印出来的那个数组就是 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 估计是你屏蔽了php错误显示,使用以上方式,开启异常方式提示。
爱吃鱼的程序员 2020-06-22 12:52:59 0 浏览量 回答数 0

回答

您可以在实现单例模式的类中实例化与数据库的连接。连接将完成一次,所有其他对象/脚本都可以轻松访问该类。 在下面的示例中,我使用称为“ Core”的类; class Core { public $dbh; // handle of the db connexion private static $instance; private function __construct() { // building data source name from config $dsn = 'pgsql:host=' . Config::read('db.host') . ';dbname=' . Config::read('db.basename') . ';port=' . Config::read('db.port') . ';connect_timeout=15'; // getting DB user from config $user = Config::read('db.user'); // getting DB password from config $password = Config::read('db.password'); $this->dbh = new PDO($dsn, $user, $password); } public static function getInstance() { if (!isset(self::$instance)) { $object = __CLASS__; self::$instance = new $object; } return self::$instance; } // others global functions } 该类从名为“ Config”的静态类中获取参数,您可以在其中存储配置: dbh->prepare($sql); $stmt->bindParam(':id', $this->id, PDO::PARAM_INT); if ($stmt->execute()) { $o = $stmt->fetch(PDO::FETCH_OBJ); // blablabla.... 如果您需要有关单例的更多信息,请查看PHP文档http://php.net/manual/en/language.oop5.patterns.php来源:stack overflow
保持可爱mmm 2020-05-17 20:56:59 0 浏览量 回答数 0

问题

阿里弹性Web托管 评测

前言 弹性Web托管 (EWS) 是阿里云在15年年度推出的新一代主机,基于先进的容器技术架构,资源隔离性好,且具有攻击隔离能力,更稳定、安全ÿ...
妙正灰 2019-12-01 21:00:21 9856 浏览量 回答数 5

回答

table=is_null($table)?C('TABLE_NAME'):$table;try{//self::$links=newPdo("mysql:host=127,0,0.1;dbname=c61",'root','welcome');self::$links=newPdo('mysql:host='.C('DB_HOST').';dbname='.C('DB_NAME'),C('DB_USER'),C('DB_PWD'));//设置字符编码self::$links->query('SETNAMESUTF8');//设置错误抛出类型self::$links->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);$this->_opt();}catch(PDOException$e){$e->getMessage();}}//定义opt属性privatefunction_opt(){$this->opt=array('field'=>"",'where'=>'','group'=>'','having'=>'','order'=>'','limit'=>'',);}//定义myquery方法publicfunctionmyquery($sql=null){//执行query方法,返回结果集对象$result=self::$links->query("$sql");//取出结果集赋值给数组$rows=$result->fetchAll(PDO::FETCH_ASSOC);return$rows;}//定义all方法publicfunctionall(){//组合字符串$sql="select".$this->opt['field']."from".$this->table.$this->opt['where'].$this->opt['group'].$this->opt['having'].$this->opt['order'].$this->opt['limit'];echo$sql;return$this->myquery($sql);}//定义field方法publicfunctionfield($sql=''){//需要判断''的情况//给feild元素赋值$this->opt['field']=$sql;return$this;}publicfunctionwhere($sql=''){$this->opt['where']="where".$sql;return$this;}publicfunctionorder($sql=''){$this->opt['order']="orderby".$sql;return$this;}publicfunctionlimit($sql=''){$this->opt['limit']="limit".$sql;return$this;}//定义find()执行publicfunctionfind(){$data=$this->limit(1)->all();//current()返回数组中当前的元素$data=current($data);return$data;}//别名函数onepublicfunctionone(){return$this->find();}//没有结果集的方法publicfunctionmyexec($sql){//echo$sql;$rows=self::$links->exec($sql);if($rows){echo"成功执行{$rows}条数据";return$rows;}else{halt('执行失败');return;}}publicfunctiondelete(){//必须判断where存不存在if(!empty($this->opt['where'])){$sql="deletefrom".$this->table.$this->opt['where'];return$this->myexec($sql);}else{halt('删除必须有where语句');return;}}//定义自动转义方法privatefunction_safe_str($str){//判断是否用户提交的数据,包括post,get,cookie.//如果值为1时为开启,则系统自动转义,如果不为1时,需要调用stripslashes函数转义.if(!get_magic_quotes_gpc()){$str=addslashes($str);};return$str;}//创建添加方法publicfunctionadd($data=null){//如果没有传递参数,使用$_post的值//否则使用传递的值.if(is_null($data))$data=$_POST;//定义存储字段和值的变量$field='';$values='';foreach($dataas$f=>$v){$field.="".$this->_safe_str($f).",";$values.="'".$this->_safe_str($v)."',";}//去除末尾的,号$field=rtrim($field,',');$values=rtrim($values,',');//insertintomessage(title,cid)values('易建联回到中国',2);//组合$sql语句,使用myexec执行.$sql="insertinto".$this->table.'('.$field.')values('.$values.')';echo$sql;return$this->myexec($sql);}//修改方法publicfunctionupdate($data=null){if(empty($_POST))return;if(is_null($data))$data=$_POST;//echo$sql;//如果没设置where语句if(!empty($this->opt['where'])){//updatearcsettitle='快学网',cid='2'whereaid=14;$values='';foreach($dataas$f=>$v){//组合$sql语句$values.=''.$this->_safe_str($f)."='".$this->_safe_str($v)."',";}//echo$values;$values=rtrim($values,",");echo$values;$sql="update".$this->table."set".$values.$this->opt['where'];return$this->myexec($sql);}else{halt('更新语句必须有where语句');return;}}}}?>
爱吃鱼的程序员 2020-06-09 14:05:07 0 浏览量 回答数 0
阿里云企业服务平台 陈四清的老板信息查询 上海奇点人才服务相关的云产品 爱迪商标注册信息 安徽华轩堂药业的公司信息查询 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 天籁阁商标注册信息 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务 北京芙蓉天下的公司信息查询