我如何使用PDO从表中获取所有列名? id name age 1 Alan 35 2 Alex 52 3 Amy 15 我想要得到的信息是, id name age 编辑: 这是我的尝试, $db = $connection->get_connection(); $select = $db->query('SELECT * FROM contacts'); $total_column = $select->columnCount(); var_dump($total_column); for ($counter = 0; $counter < $total_column; $counter ++) { $meta = $select->getColumnMeta($counter); $column[] = $meta['name']; } print_r($column); 然后我得到, Array ( [0] => […]
我在一个项目中使用PHP的PDO层进行数据访问,并且我一直在阅读它,并且看到它对持久性数据库连接具有良好的固有支持。 我想知道我是否应该使用它们。 我会看到在一个CRUD沉重的应用程序的性能优势? 是否有缺点需要考虑,或许与安全有关? 如果对你很重要,我使用MySQL 5.x.
我已经看到这个问题在Stack Overflow上重复了几次,但是没有一个能够充分地探究这个问题(或者至less对我有帮助) 问题是数据库查询应该返回整型数据types的整数列在PHP中。 而是查询以stringtypes的forms返回每一列。 我已经确保“PDO :: ATTR_STRINGIFY_FETCHES”如果只是为了确保结果不被转换为string。 我见过的答案: 这是不能做到的 不,它正在Mac OS X上安装PHP / MySQL 在你的代码中input所有的值 不,我不会这样做的 不要担心,PHP是松散的types 我的数据以JSONforms输出,并被许多其他服务使用,有些则需要格式正确的数据 从我的研究中,我了解到这是一个驱动程序的实现问题。 许多消息来源声称,MySQL本地驱动程序不支持返回的数字types。 这似乎不正确,因为它在Mac OS X上工作。除非他们的意思是说“ Linux上的MySQL本地驱动程序不支持该function”。 这意味着我在Mac OS X上安装的驱动程序/环境有一些特殊之处。我一直试图找出差异来应用修复程序,但是由于我对如何检查这些东西的知识而受到限制。 区别: OS X上的PHP是通过Home Brew编译和安装的 Ubuntu上的PHP通过“apt-get install php5-dev”安装 OS X上的PHP连接到也在OS X上运行的MySQL服务器 服务器版本:5.1.71-日志源分配 Ubuntu上的PHP连接到Rackspace云数据库 服务器版本:5.1.66-0 + squeeze1(Debian) Ubuntu环境 版本:10.04.1 PHP 5.4.21-1 + debphp.org〜lucid + 1(cli)(内置:2013年10月21日08:14:37) php -i PDO_MYSQL 用于MySQL的PDO驱动程序=>启用的客户端API版本=> 5.1.72 […]
我正在使用PDO插入一个logging(MySQL和PHP) $stmt->bindParam(':field1', $field1, PDO::PARAM_STR); $stmt->bindParam(':field2', $field2, PDO::PARAM_STR); $stmt->execute(); 有没有办法知道它是否插入成功,例如,如果logging没有插入,因为它是重复的? 编辑:当然,我可以看看数据库,但我的意思是程序化的反馈。
我一直在阅读特别是“错误logging”我已经拿出了函数“error_log”这似乎是一个很好的工具来处理错误logging。 但如何使用它最顺利和最好的方式? 如果我有一个 try { //try a database connection… } catch (PDOException $e) { error_log($e->getMessage(), 3, "/var/tmp/my-errors.log"); } 这会在my-errors.log文件中logging错误。 但是,如果我有时需要改变文件的位置,一个新的文件夹,或其他东西。 如果我有大量的文件,我需要将它们全部更改。 现在我开始考虑使用一个variables来设置错误日志的path。 当然可以工作,但是如果我想在函数或类方法中使用error_log呢? 那么我需要将variables设置为全局variables,但这被认为是不好的做法! 但是如果我不能在课堂上深入使用这个function,那么这也不算是不好的做法吗? 这里有什么好的解决scheme? <?php function legit() { try { if (1 == 1) { throw new Exception('There was an error here'); } } catch (Exception $e) { throw new Exception('throw the error […]
我被告知,我会更好地使用PDO进行MySQL转义,而不是mysql_real_escape_string 。 也许我正在度过一个大脑死亡的日子(或者事实上,我不是一个天生的程序员,我仍然在PHP的新手阶段),但有检查了PHP手册并阅读了PDO中的条目 ,但是我还没有更清楚PDO究竟是什么,为什么比使用mysql_real_escape_string更好。 这可能是因为我还没有真正掌握OOP的复杂性(我认为这与OOP有关),但除了variables和数组值似乎在它们之前有一个冒号,我还不确定它到底是什么以及如何使用它(为什么它比mysql_real_escape_string更好(这也可能与我没有清楚地了解“类”是什么有关) ,所以当我读“PDO类”时,我真的不聪明)。 在MySQL网站的“开发者区”位阅读了一两篇文章后 ,我仍然没有更清楚。 因为我现在还不知道这是什么东西,所以我认为现在使用它可能有点超出我的想法,但我仍然有兴趣扩大我的教育范围,并找出如何改进的地方。 任何人都可以用简单的英语向我解释PDO是什么(或者用简单的英语来指向我的主题),以及如何去使用它?
是否可以绑定一个表名? 我想创build一个类来读取表中的列,并根据字段types为我生成表单input。 当我做$form = new form("users"); ,构造函数应该开始从下面的代码从表中获取字段名称: class form{ public function __construct($table, $skip = array("id")){ $pdo = new PDO('mysql:host=localhost;dbname=site;',USER,PASS); $query = $pdo->prepare("DESCRIBE :table"); $query->bindValue(':table', $table, PDO::PARAM_STR, strlen($table)); $query->execute(); while($field = $query->fetch(PDO::FETCH_NUM)){ var_dump($field); echo "<br /><br />"; } unset($pdo); } } 这工作得很好,当我在prepare语句中指定“users”而不是“:table”时,但是它正在工作的绑定,我敢肯定这是因为它试图绑定一个表名。 此外,这需要绑定,因为我想有能力通过$_GET和我的表名称。
只是一个简单的问题。 在循环(对于大型结果集)中使用PDO :: fetchAll()和PDO :: fetch()之间是否有任何性能差异? 如果这样做有什么区别的话,我可以获取用户定义的类的对象。 我最初没受过教育的假设是fetchAll可能会更快,因为PDO可以在一个语句中执行多个操作,而mysql_query只能执行一个。 然而,我对PDO的内部工作知之甚less,文档也没有提到这个问题,fetchAll()是不是只是一个PHP端的循环转储到数组中。 任何帮助?
我对PHP相当陌生,并且使用标准的MySQL数据库调用构build了一个中等大小的网站。 不过,我最近才了解到PDO,我希望能从社区中找出是否值得从MySQL切换到PDO。 为了安全,我一直在使用mysql_real_escape_string 。 有关该网站的信息: 我正在使用INSERT和SELECT调用的混合。 从SELECT调用返回的数据不是很大(使用LIMIT返回不超过30条logging)。 也不会有很多INSERT的。 该网站目前没有生效,所以现在做出改变是很容易的。 在您的专业意见中,是否值得我的时间从MySQL切换到PDO网站? 还是留在MySQL一样好? 或者换句话说,如果现在改用PDO,原因是什么?
这是我第一次堆栈溢出,但我发现现有的知识体系非常有帮助。 无论如何,这是我的问题: 我试图通过php的PDO类(mysql驱动程序)进行search。 我有以下查询使用MySQL客户端(表名更改为保护无辜): SELECT hs.hs_pk, hs.hs_text, hs.hs_did, hd.hd_did, hd.hd_text, hv.hv_text, hc.hc_text FROM hs LEFT JOIN hd ON hs.hs_did = hd.hd_did LEFT JOIN hd ON hd.hd_vid = hv.hv_id LEFT JOIN hc ON hd.hd_pclass = hc.hc_id WHERE hs.hs_text LIKE "%searchTerm%" LIMIT 25; 无论我使用的search词是什么,这都像一个魅力。 但是,当我移动到PHP,我不能得到它返回任何东西。 我已经尝试了几种不同的语法,似乎合乎逻辑的工作,但没有任何我已经尝试的作品。 这里是我现有的代码: $handle = fopen('/foo/bar/test.log', 'w+'); fwrite($handle, "doSearch, with search term: $searchTerm\n"); […]