Tag: MySQL

在PHP中使用PDO打开的SQL连接必须closures

当我使用PHP的内置MySQL函数在PHP中打开MySQL连接时,我执行以下操作: $link = mysql_connect($servername, $username, $password); mysql_select_db($dbname); //queries etcetera mysql_close($link); 当我打开与PDO的连接时,它看起来像这样: $link = new PDO("mysql:dbname=$dbname;host=$servername",$username,$password); //prepare statements, perform queries 我是否必须像使用mysql_connect()和mysql_close()那样显式closures连接? 如果没有,PHP如何知道我什么时候完成连接? TIA。

MySQL导出到outfile:CSV转义字符

我有一个时间表的数据库表与一些常见的feilds。 id, client_id, project_id, task_id, description, time, date 有更多,但那是它的要点。 我在该表上运行一个导出到CSV文件的导出,以便为用户提供其数据的备份。 它也被用来作为一个macrosExcel文件的数据导入与一些自定义报告。 这一切都与我一起循环使用php的时间表,并打印到一个文件的行。 问题是一个大的数据库可能需要几个小时才能运行,这是不可接受的。 所以我用MySQL INTO OUTFILE命令重写了它,并将其减less到几秒钟,以便运行,这非常棒。 现在的问题是我似乎无法逃避描述字段中的所有新行字符等。 真的,用户可以在这里input潜在的任何字符组合,包括回车/换行。 这是我有的MySQL代码片段: SELECT id, client, project, task, REPLACE(REPLACE(ifnull(ts.description,''),'\n',' '),'\r',' ') AS description, time, date INTO OUTFILE '/path/to/file.csv' FIELDS ESCAPED BY '""' TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM …. 但… 当我尝试查看输出文件的源代码时,文件中仍然存在换行符,因此Excel的CSV导入将打破Excel向导创build的所有花式macros和数据透视表。 任何关于最佳行动的想法?

当*不*使用准备好的语句?

我正在重新devise一个使用最小数据库的PHP驱动的网站。 原始版本使用“伪准备语句”(引用和参数replace的PHP函数)来防止注入攻击并将数据库逻辑从页面逻辑中分离出来。 用一个使用PDO和真实准备好的语句的对象代替这些特定的函数似乎是很自然的,但是在我读完这些对象之后,我不太确定。 PDO似乎仍然是一个好主意,但准备好的陈述的主要卖点之一就是能够重用它们,这是我永远不会想到的。 这是我的设置: 这些陈述都非常简单。 大多数是在formsSELECT foo,bar FROM baz WHERE quux = ? ORDER BY bar LIMIT 1 SELECT foo,bar FROM baz WHERE quux = ? ORDER BY bar LIMIT 1 。 在这个地段最复杂的陈述只是三个这样的select联合在一起的UNION ALL 。 每个页面命中至多执行一个语句,并只执行一次。 我处于一个托pipe环境,因此对个人进行任何“压力testing”的抨击他们的服务器持怀疑态度。 鉴于使用准备好的语句,至less会使我所做的数据库往返次数增加一倍,我最好是避免它们? 我可以使用PDO::MYSQL_ATTR_DIRECT_QUERY避免多个数据库行程的开销,同时保留参数化和注入防御的好处吗? 或者,执行准备好的语句API使用的二进制调用与执行未准备好的查询相比,执行得还不错,我不应该担心这个问题呢? 编辑: 感谢所有的好build议,伙计们。 这是我希望我可以将多个答案标记为“已接受”的地方 – 有很多不同的观点。 但最终,我必须给予他应有的回报……如果没有他的回答,即使在听取了大家的意见后,我也会幸福地离开,完成了错误的事情。 🙂 仿真准备好的声明是!

phpMyAdmin正在抛出一个#2002无法login到mysql服务器的phpmyadmin

我已经在本地机器上安装了MySQL服务器企业版5.1,现在我想安装phpMyAdmin,但是不起作用。 我有红外phpMyAdmin到我的服务器根目录,并浏览到“localhost / phpMyAdmin / setup / index.php”,启动了一个新的服务器,我改变的唯一的设置是填写我的MySQL密码的字段“Password for config auth” 所以,现在当我尝试login时,我收到一条错误消息,说:“#2002无法login到MySQL服务器phpmyadmin” 有谁知道什么是错的? 自昨天以来,我一直有这个问题。

dynamicMySQL数据库连接entity framework6

我希望将dynamic连接string传递给entity framework上下文。 我有超过150模式是相同的(每个帐户一个),我想select连接如下: ApplicationDbContext db = new ApplicationDbContext("dbName"); 从理论上讲,这将是相当容易的,因为我可以创build一个connectionString并将其作为构造函数的parameter passing,例如: public ApplicationDbContext(string dbName) : base(GetConnectionString(dbName)) { } public static string GetConnectionString(string dbName) { // The connectionString passed is something like: // Server=localhost;Database={0};Uid=username;Pwd=password var connString = ConfigurationManager .ConnectionStrings["MyDatabase"] .ConnectionString .ToString(); return String.Format(connString, dbName); } 当我只传递连接string名称时,我可以连接成功,但不能当我如下dynamic生成它。 我现在意识到,这是因为web.config中的连接string中有providerName="MySql.Data.MySqlClient"属性。 当我将实际连接stringdynamic传递给连接时,它假定它需要连接到SQL Server而不是MySQL,并且由于连接string无效而失败。 问题是,如果我dynamic创build它,我如何将提供程序名称传递给连接string?

如何将mysqldump的输出分割成更小的文件?

我需要将整个表从一个MySQL数据库移动到另一个。 我没有完全访问第二个,只有phpMyAdmin访问。 我只能上传(压缩)小于2MB的sql文件。 但是第一个数据库表的mysqldump的压缩输出大于10MB。 有没有办法将输出从mysqldump分割成更小的文件? 我无法使用split(1),因为我无法将文件(1)回送到远程服务器上。 还是有我错过的另一个解决scheme? 编辑 如果第一个海报提供的mysqldump的–extended-insert = FALSE选项产生一个.sql文件,然后可以将其分割成可导入的文件,前提是split(1)用一个合适的–lines选项调用。 通过试验和错误,我发现bzip2压缩.sql文件的20倍,所以我需要弄清楚有多less行代码大致相当于40MB。

在MySQL中循环遍历结果集

我正在尝试在MySQL中编写一个存储过程,它将执行一个稍微简单的select查询,然后遍历结果以决定是执行其他查询,数据转换还是完全丢弃数据。 实际上,我想要实现这个: $result = mysql_query("SELECT something FROM somewhere WHERE some stuff"); while ($row = mysql_fetch_assoc($result)) { // check values of certain fields, decide to perform more queries, or not // tack it all into the returning result set } 只有,我只需要在MySQL中,所以它可以被称为一个过程。 我知道对于触发器,有FOR EACH ROW …语法,但是我找不到在CREATE TRIGGER …语法之外使用的任何东西。 我已经阅读了MySQL中的一些循环机制,但到目前为止,我可以想象的是,我将实现这样的事情: SET @S = 1; LOOP SELECT * FROM […]

使用MySQLdb执行“SELECT … WHERE … IN …”

我在执行Python中的一些SQL时遇到问题,尽pipe类似的SQL可以在mysql命令行下正常工作。 表格看起来像这样: mysql> SELECT * FROM foo; +——-+—–+ | fooid | bar | +——-+—–+ | 1 | A | | 2 | B | | 3 | C | | 4 | D | +——-+—–+ 4 rows in set (0.00 sec) 我可以从mysql命令行执行下面的SQL查询,没有问题: mysql> SELECT fooid FROM foo WHERE bar IN ('A','C'); SELECT fooid FROM foo […]

在同一列上select多个WHERE条件

好吧,我想我可能忽略了一些明显/简单的东西…但是我需要写一个查询,只返回匹配同一列上的多个条件的logging。 我的表是一个非常简单的链接设置,用于将标志应用于用户… ID contactid flag flag_type ———————————– 118 99 Volunteer 1 119 99 Uploaded 2 120 100 Via Import 3 121 100 Volunteer 1 122 100 Uploaded 2 等等…在这种情况下,你会看到联系99和100被标记为“志愿者”和“上传”… 我需要做的只是返回那些仅仅匹配通过search表单input的多个标准的联系人…联系人必须匹配所有select的标志…在我的脑海中,SQL应该看起来像这样: SELECT contactid WHERE flag = 'Volunteer' AND flag = 'Uploaded'… 但是……没有任何回报……我在这里做错了什么?

我可以在PHP中使用PDO创build数据库吗?

我想创build一个使用PDO与MySQL交互的类。 我可以使用PDO创build一个新的MySQL表吗?