我不时会看到有关连接数据库的问题.
大多数答案不是我这样做的方式,或者我可能没有正确得到答案.无论如何; 我从来没有想过这个,因为我这样做对我有用.
但这是一个疯狂的想法; 也许我这样做是错的,如果是这样的话; 我真的想知道如何使用PHP和PDO正确连接到MySQL数据库并使其易于访问.
我是这样做的:
首先,这是我的文件结构(剥离):
public_html/
* index.php
* initialize/
-- load.initialize.php
-- configure.php
-- sessions.php
Run Code Online (Sandbox Code Playgroud)
index.php
在最顶端,我有require('initialize/load.initialize.php');.
load.initialize.php
# site configurations
require('configure.php');
# connect to database
require('root/somewhere/connect.php'); // this file is placed outside of public_html for better security.
# include classes
foreach (glob('assets/classes/*.class.php') as $class_filename){
include($class_filename);
}
# include functions
foreach (glob('assets/functions/*.func.php') as $func_filename){
include($func_filename);
}
# handle sessions
require('sessions.php');
Run Code Online (Sandbox Code Playgroud)
我知道有更好或更正确的方法来包含类,但不记得它是什么.还没有时间去研究它,但我认为这是有道理的autoload.类似的东西......
configure.php
这里我基本上只是覆盖一些php.ini -properties并为该站点做一些其他的全局配置
connect.php
我把连接放到一个类上,所以其他类可以扩展这个...
class …Run Code Online (Sandbox Code Playgroud) 谷歌的分页行为背后的逻辑是什么?
我的分页器是这样的:
[1] 2 3 ... 184 >
< 1 [2] 3 4 ... 184 >
< 1 2 [3] 4 5 ... 184 >
< 1 2 3 [4] 5 6 ... 184 >
< 1 ... 3 4 [5] 6 7 ... 184 >
< 1 ... 4 5 [6] 7 8 ... 184 >
< 1 ... 5 6 [7] 8 9 ... 184 >
< 1 ... 6 7 [8] 9 10 ... 184 >
Run Code Online (Sandbox Code Playgroud)
以下是上述示例的实时版本: …
我正在设置一个包含的PHP文件库..cfg用于配置文件,.tpl用于模板结构文件,.dlf用于文档布局文件,dbh用于数据库连接等.
现在,它们被称为.tpl.php,.dlf.php等.但他们是否还需要.php扩展名呢?如果没有,是否有任何我不应该使用的扩展?像.exe执行文件..
那你好.我正在将数据库的字符集从更改latin1_sweedish_ci为utf8.我总是使用,utf8_danish_ci因为它是最接近挪威人的风格 - 我想.
但是,我们utf8_general_ci并utf8_unicode_ci?
前一段时间; 由于排序算法在后者中更复杂,因此优选使用_general_ci更好/更快的性能,并且_unicode_ci更准确.但是,由于速度/性能不再是问题 - 或者_unicode_ci在大多数情况下不再是问题 - 在大多数情况下都可以使用吗?
但是有什么_unicode_ci不同_danish_ci呢?
它是最后三个字母æ,ø,å在考虑到北欧字母?
我发现的大多数比较(一个与另一个)只是在_general_ci和之间_unicode_ci.
任何人都知道何时使用_unicode_ci或何时使用的例子_danish_ci将受到高度赞赏......
我有3个数据库,现在我需要将每个数据库中的几个表连接成一个singel查询.我该怎么做呢?
这是我的联系:
try {
$con_options = array(
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // _SILENT (pub) || _WARNING || _EXCEPTION (dev)
);
$con_1 = new PDO('mysql:host=localhost; dbname=database_1', 'user_1', 'pass_1', $con_options);
$con_2 = new PDO('mysql:host=localhost; dbname=database_2', 'user_2', 'pass_2', $con_options);
$con_3 = new PDO('mysql:host=localhost; dbname=database_3', 'user_3', 'pass_3', $con_options);
} catch (PDOException $err) {
// catch, record/log and do stuff with errors
}
Run Code Online (Sandbox Code Playgroud)
我有3个不同的用户,每个数据库都有一个唯一的密码.一个数据库存储facebook-apps和其他iframe应用程序的应用程序数据.另一个包含所有网店数据,如产品,订单,客户等,而第三个包含网站结构和内容.
现在; 我想以JOIN某种方式将它们中的三个放在一个查询中.
我正在写这个问题; 我得到的一个想法是让另一个"超级"用户可以访问所有三个数据库并只进行一次多表查询?这是一个可接受的解决方案吗?
如果是这样,我是否必须在查询中指定哪个数据库?
我创建了这个函数来获取有关MySQL数据库中的表及其相应列的信息:
class SQL extends DB
{
public static function showTables($alias='', $table_name='')
{
if(empty($alias) || $alias===true){ // empty = show all tables from all available connections, true = show columns aswell
foreach(self::get() as $con){ // get() keeps, among other things, the aliases of all available connections
$html .= '"'.$con['alias'].'": '.$con['db']; // the alias for the connection, and databasename, for the following table(s)
$tables = self::con($con['alias'])->query('SHOW TABLES')->fetchAll(PDO::FETCH_COLUMN); // fetch an array of all tables available through this connection
foreach($tables as $table){
$html …Run Code Online (Sandbox Code Playgroud) 我正在制作日历来预约约会.
我在表格单元格中渲染了一个日历,如下所示:
每个单元格都有一个时间戳,对于每个单元格,我正在尝试运行查询以检查我的预留表中是否存在该特定时间戳:
start并stop设置为datetime.
可能会迟到,但我得出结论,这是相反的
SELECT *
FROM reservations
WHERE (date_field BETWEEN '2015-08-05 10:00:00' AND '2015-08-05 10:45:00')
Run Code Online (Sandbox Code Playgroud)
...因为在我的情况下,我只有一个特定的时间来检查是否在同一记录中的两个不同字段之间.
我尝试WHERE start >= ? AND stop <= ?了相同的日期,但当然这不起作用,因为停止日期永远不会与开始日期相同...
您在上图中看到的结果是我有一个如下所示的表:
对于每个单元格,我运行此查询:SELECT * FROM reservations WHERE day_time = ?其中?是该特定单元格中的时间戳.
它确实有效,但它似乎是一种完成我所拥有的可怕方式.
此外,时间间隔不会总是15分钟.它可能是5,10,30或1小时.因此,为了覆盖这一变化,我必须每隔5分钟创建一个约会的记录.
这样做有什么好办法?
我已经研究了不同的脚本(Easy!Appointments,Booked),但它们似乎对我需要的东西有点过分.
我正在使用blur()将用户在表单中写入的内容复制到注册向导末尾的摘要页面中.这很有效.
但是当我预设一些字段值并且这些是正确的时,没有任何内容被复制,因为用户可能不会与该特定字段进行交互.他们只会点击继续.
有没有办法触发所有文本字段,textareas以便获取那些复制的值?
这是我正在使用的功能:
/**
* Author: Thomas Kile
* Desc: Copy text from a form element into a given tag.
**
* @param string $type type of form element
* @param string $from Id of form element to copy text/value from.
* @param string $to Id of element to copy text/value into.
*/
function copyFormData(type,from,to)
{
switch (type)
{
case 'text': var copied_text = $(from).val(); break; // get input text value
case 'select': var copied_text = $(from+' …Run Code Online (Sandbox Code Playgroud)