暂无个人介绍
可以,但是您需要更改数据库结构;进行更改后,您可以在一个查询中检索任意深度的树。查询稍微复杂一些,但是仍然非常简单。来源:stack overflow
这段代码像筛子一样漏水。 您正在调用mysql_query一个mysql_real_escape_string()看不见的功能。 您正在其他功能中使用PDO。 这是一团糟,没有道理。如果您知道如何使用PDO,请使用它。 这样您就安全了。
如果要使用mysql_query,则必须使用mysql_real_escape_string()。来源:stack overflow
尝试还原到旧版本的连接器。适用于我的是6.3.4。另外,请确保在服务器上使用与开发工作站上完全相同的版本。来源:stack overflow
一种方法是将您的表2转换为长格式,其中一列用于GeneGroupName成员基因,一列用于成员基因,然后使用match。
(table1 <- data.frame(GeneName=sample(LETTERS[1:12]), col2=runif(12)))
(table2 <- data.frame(GeneGroupName=1:4, g1=LETTERS[1:4], g2=LETTERS[5:8], g3=LETTERS[9:12]))
(table2.long <- reshape(table2, direction='long', varying=list(-1), timevar='gene'))
table1$grp <- table2.long$GeneGroupName[match(table1$GeneName, table2.long$g1)]
table1
显然,您在操作系统级别而不是在应用程序级别设置了克朗。尽管,就像在Unix / Linux上一样,您也可以使用Task Schedular在Windows平台上设置CRON ( All Programs->Accessories->System Tools -> Task Schedular )。我认为您应该为VPN或专用服务器设置权杖,因为它需要私下访问系统资源。
除此之外,Crontab command(unix / linux)的语法如下:
1 2 3 4 5 /root/backup.sh 1: Minute (0-59) 2: Hours (0-23) 3: Day (0-31) 4: Month (0-12 [12 == December]) 5: Day of the week(0-7 [7 or 0 == sunday]) /path/to/command - Script or command name to schedule来源:stack overflow
该where子句永远不会返回nil,它返回一个ActiveRecord :: Relation对象,该对象可以为空!
尝试以下方法:
def create if @trained = Certificate.where(user_id: params[:certificate][:user_id]).first @trained.update_attributes(attend: "No") else @trained = Certificate.new(params[:certificate]) if @trained.save @trained.update_attributes(attend: "Yes") end end
redirect_to grandstreamers_resellers_path end 但我会将代码重构为如下形式:
def create @trained = Certificate.where(user_id: params[:certificate][:user_id]).first @trained ||= Certificate.new(params[:certificate]) if @trained.persisted? # tests if the records is persisted in the DB (has an ID) @trained.attend = "No" else @trained.attend = "Yes" end
@trained.save redirect_to grandstreamers_resellers_path end 非常简短的版本:
def create @trained = Certificate.where(user_id: params[:certificate][:user_id]).first || Certificate.new(params[:certificate]) @trained.attend = @trained.persisted? ? "No" : "Yes" @trained.save
redirect_to grandstreamers_resellers_path end 为了记录(@NitinJ,请看一下),您可以在if条件中分配变量:
if first_user = User.first
first_user.id else # User.first returned nil end来源:stack overflow
假设您的字段是一种date类型(或相似类型):
SELECT DATE_ADD(your_field_name
, INTERVAL 2 DAY) FROM table_name
; 使用您提供的示例,它看起来可能像这样:
UPDATE classes SET date
= DATE_ADD(date
, INTERVAL 2 DAY) WHERE id
= 161; 这种方法也适用datetime。来源:stack overflow
(在PostgreSQL 9中测试过)
标识摆脱和时间戳。
select rid, max(timestamp) as ts from test group by rid;
1 2011-04-14 18:46:00 2 2011-04-14 14:59:00 加入吧。
select test.pid, test.cost, test.timestamp, test.rid from test inner join (select rid, max(timestamp) as ts from test group by rid) maxt on (test.rid = maxt.rid and test.timestamp = maxt.ts)来源:stack overflow
问题出在函数名称上。函数名称应具有字段名称。就像你的例子一样
$attribute_name = "image_wheel"; 所以函数名称应该是
public function setImage_wheelAttribute($value) 这样可以解决问题来源:stack overflow
检查您的apache错误日志中是否有错误。另外,尝试使用_www并手动执行脚本。来源:stack overflow
"我不知道任何方法可以在一个语句中执行此操作,即使使用触发器也是如此。
@Lucky建议的触发器解决方案在MySQL中如下所示:
CREATE TRIGGER MyTrigger BEFORE INSERT ON MyTable FOR EACH ROW BEGIN SET NEW.group_id = COALESCE(NEW.group_id, NEW.id); END 但是,有一个问题。在此BEFORE INSERT阶段,id尚未生成自动生成的值。因此,如果group_id为null,则默认NEW.id为始终为0。
但是,如果您在此AFTER INSERT阶段将触发器更改为触发,那么您就可以访问的生成值NEW.id,则无法修改列值。
MySQL不支持DEFAULT列的表达式,因此您也不能在表定义中声明此行为。*更新:MySQL 8.0.13支持,DEFAULT ( )但表达式仍然不能依赖于自动增量值(已记录)。
唯一的解决方案是执行INSERT,然后立即执行UPDATE来更改group_id未设置的。
INSERT INTO MyTable (group_id, value) VALUES (NULL, 'a'); UPDATE MyTable SET group_id = COALESCE(group_id, id) WHERE id = LAST_INSERT_ID();" 来源:stack overflow
"转到“编辑”->“首选项”->“ SQL编辑器”,然后将此参数设置为更高的值:DBMS连接读取超时(以秒为单位)。例如:86400。
关闭并重新打开MySQL Workbench。杀死先前可能正在运行的查询,然后再次运行该查询。" 来源:stack overflow
"试试这个查询-
SELECT t2.company_name, t2.expose_new, t2.expose_used, t1.title, t1.seller, t1.status, CASE status WHEN 'New' THEN t2.expose_new WHEN 'Used' THEN t2.expose_used ELSE NULL END as 'expose' FROM products
t1 JOIN manufacturers t2 ON t2.id = t1.seller WHERE t1.seller = 4238" 来源:stack overflow
"您正在使用的MySQL帐户可能具有旧的16个字符长的密码(哈希)。 您可以使用MySQL客户端(例如HeidiSQL,MySQL控制台客户端或任何其他客户端)和有权访问的帐户进行测试mysql。user表。如果密码字段包含16个字符,则它是一个旧密码,并且mysqlnd无法使用它来连接到MySQL服务器。 您可以使用以下方式为该用户设置新密码
SET PASSWORD FOR 'username'@'hostmask' = PASSWORD('thepassword') 参见dev_mysql_set_password
编辑: 您还应该检查服务器是否默认设置为使用/创建旧密码。
edit2: 请运行查询
SELECT Length(Password
), Substring(Password
, 1, 1) FROM mysql
.user
WHERE user
='username' 在5.0.22服务器上(“失败”的服务器)。替换username为您在mysql_connect()中使用的帐户。 那会返回什么?" 来源:stack overflow
"主题前提 多语言站点包含三个不同方面:
界面翻译 内容 网址路由 尽管它们都以不同的方式互连,但是从CMS的角度来看,它们是使用不同的UI元素进行管理的,并且存储方式也不同。您似乎对自己的实现和对前两个的理解充满信心。问题是关于后一个方面的问题:“ URL转换?我们应该这样做吗?应该以什么方式进行?”
URL可以由什么组成? 一个非常重要的事情是,不要对IDN感兴趣。取而代之的是支持音译(也:转录和罗马化)。乍一看,IDN似乎是国际URL的可行选择,但实际上,它不能按广告宣传工作,原因有两个:
某些浏览器会将非ASCII字符(例如'ч'或)'ž'转换为'%D1%87'和'%C5%BE' 如果用户具有自定义主题,则主题的字体很可能没有这些字母的符号 实际上,几年前,我在一个基于Yii的项目(可怕的框架,恕我直言)中尝试了IDN方法。在抓取该解决方案之前,我遇到了上述两个问题。另外,我怀疑这可能是攻击媒介。
可用选项...如我所见。 基本上,您有两个选择,可以抽象为:
http://site.tld/[:query]:[:query]决定语言和内容选择的地方
http://site.tld/[:language]/[:query]:[:language]URL的一部分定义语言的选择,[:query]仅用于标识内容
查询是Α和Ω.. 假设您选择http://site.tld/[:query]。
在这种情况下,您有一种主要的语言来源:[:query]段的内容;以及另外两个来源:
$_COOKIE['lang']该特定浏览器的价值 HTTP Accept-Language (1),(2)标头中的语言列表 首先,您需要将查询与定义的路由模式之一进行匹配(如果您选择的是Laravel,请在此处阅读)。成功匹配模式后,您需要查找语言。
您将必须遍历模式的所有部分。找到所有这些片段的潜在翻译,并确定使用哪种语言。当(不是“如果”)发生冲突时,将使用两个其他来源(cookie和标头)来解决路由冲突。
例如:http://site.tld/blog/novinka。
那是音译""блог, новинка"",在英语中大约是""blog"", ""latest""。
您已经注意到,俄语中的“блог”将译为“博客”。这意味着对于您的第一部分[:query](在最佳情况下),最终会['en', 'ru']列出可能的语言。然后您进入下一个片段-“ novinka”。可能的列表中可能只有一种语言:['ru']。
当列表中有一项时,您已经成功找到该语言。
但是,如果最终得到2种(例如:俄语和乌克兰语)或更多种可能性..或0种可能性(视情况而定)。您将必须使用Cookie和/或标题才能找到正确的选项。
如果其他所有方法均失败,则选择站点的默认语言。
语言作为参数 替代方法是使用URL,可以将其定义为http://site.tld/[:language]/[:query]。在这种情况下,翻译查询时,您无需猜测语言,因为此时您已经知道要使用哪种语言。
还有另一种语言来源:cookie值。但是,这里没有必要弄乱Accept-Language标头,因为在“冷启动”的情况下(当用户第一次使用自定义查询打开网站时),您不会处理未知数量的可能的语言。
相反,您有3个简单的优先选项:
如果[:language]设置了细分,请使用它 如果$_COOKIE['lang']设置,使用它 使用默认语言 使用该语言时,您只需尝试翻译查询,如果翻译失败,请对该特定段使用“默认值”(基于路由结果)。
这不是第三种选择吗? 是的,从技术上讲,您可以将两种方法结合使用,但这会使过程复杂化,并且只适合那些想要手动更改URL http://site.tld/en/news到http://site.tld/de/news并希望新闻页面更改为德语的人员。
但是即使是这种情况,也可以使用cookie值(其中包含有关先前选择语言的信息)缓解,以减少魔术和希望。
使用哪种方法? 您可能已经猜到了,我建议您将其http://site.tld/[:language]/[:query]作为更明智的选择。
同样在真实的单词情况下,URL中将包含第三大部分:“标题”。如在线商店中的产品名称或新闻站点中的文章标题。
例: http://site.tld/en/news/article/121415/EU-as-global-reserve-currency
在这种情况下'/news/article/121415'将是查询,而'EU-as-global-reserve-currency'标题是。纯粹用于SEO。
可以在Laravel中完成吗? Kinda,但默认情况下不是。
我不太熟悉它,但是据我所知,Laravel使用简单的基于模式的路由机制。要实现多语言URL,您可能必须扩展核心类,因为多语言路由需要访问不同形式的存储(数据库,缓存和/或配置文件)。
已路由。现在怎么办? 结果,您最终将获得两条有价值的信息:当前语言和查询的翻译段。然后,这些值可用于调度将产生结果的类。
基本上,以下网址:(http://site.tld/ru/blog/novinka或不含的版本'/ru')变成了类似
$parameters = [ 'language' => 'ru', 'classname' => 'blog', 'method' => 'latest', ]; 您仅用于调度的对象:
$instance = new {$parameter['classname']}; $instance->{'get'.$parameters['method']}( $parameters ); ..或它的某些变体,具体取决于特定的实现。"来源:stack overflow
确保正确定义了MySQL配置编码。使用以下命令检查设置和修改的正确性:
show variables like 'character%'; 和 show variables like 'collation%';
将这些行添加到my.cnf或my.ini中:
对于MySQL 5.1.nn和更高版本5.5.29,您只需要这两行:
[mysqld] character-set-server = utf8 character-set-filesystem = utf8 对于MySQL 5.0.nn和更早版本,请使用以下设置:
[client] default-character-set=utf8
[mysql] default-character-set=utf8
[mysqld] default-character-set=utf8 character-set-server=utf8 使用MySQL-Workbench进行设置可能更方便。5+版本非常好。
在此处输入图片说明
在您的Java程序中按以下方式连接:
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/myDatabase?useUnicode=tr来源:stack overflow
无需使用的更新替代方法extra是强制转换功能(Django 1.10中的新增功能):
from django.db.models import FloatField from django.db.models.functions import Cast Value.objects.create(integer=4) value = Value.objects.annotate(as_float=Cast('integer', FloatField())).get()> print(value.as_float) 4.0 从https://docs.djangoproject.com/en/1.10/ref/models/database-functions/#cast来源:stack overflow
万一其他人遇到此问题,则MAMP上mysql的默认端口是8889,但php希望用于mysql的端口是3306。因此,您需要打开MAMP,转到首选项,并将MAMP的mysql端口更改为3306,然后重新启动mysql服务器。现在,使用host = localhost,user = root,pass = root可以成功连接。来源:stack overflow
首先要说的是,由于只有一个查询,您可以插入多行 INSERT
INSERT INTO Table (col1, col2, col3) VALUES ('abc', 'def', 'ghi'), ('abc', 'def', 'ghi'), ('abc', 'def', 'ghi'), ('abc', 'def', 'ghi'), ('abc', 'def', 'ghi') -- and so on... 知道了这一点之后,便可以使用PDO获得良好的解决方案(例如)。 你要记住,你想有一个完整prepare和execute过程(在安全期限,你必须单独通过每个参数)。
假设您要插入的行结构如下:
$rows = array( array('abc', 'def', 'ghi'), // row 1 to insert array('abc', 'def', 'ghi'), // row 2 to insert array('abc', 'def', 'ghi') // row 3 to insert // and so on ... ); 您的目标是将此结果作为准备好的查询:
INSERT INTO Table (col1, col2, col3) VALUES (?, ?, ?), (?, ?, ?), (?, ?, ?) 及其相应的执行:
PDOStatement::execute(array('abc', 'def', 'ghi', 'abc', 'def', 'ghi', 'abc', 'def', 'ghi'));
好吧,您现在只需要这样做:
$rows = array( array('abc', 'def', 'ghi'), array('abc', 'def', 'ghi'), array('abc', 'def', 'ghi') );
$row_length = count($rows[0]); $nb_rows = count($rows); $length = $nb_rows * $row_length;
/* Fill in chunks with '?' and separate them by group of $row_length */ $args = implode(',', array_map( function($el) { return '('.implode(',', $el).')'; }, array_chunk(array_fill(0, $length, '?'), $row_length) ));
$params = array(); foreach($rows as $row) { foreach($row as $value) { $params[] = $value; } }
$query = "INSERT INTO Table (col1, col2, col3) VALUES ".$args; $stmt = DB::getInstance()->prepare($query); $stmt->execute($params); 而且...就是这样!
这样,每个参数都将被单独处理,这就是您想要的(安全性,安全性,安全性!)及其所有内容,并且只需一个INSERT查询就可以动态方式进行处理
如果要插入的行太多(请参阅此),则应execute一个接一个
$rows = array( array('abc', 'def', 'ghi'), // row 1 to insert array('abc', 'def', 'ghi'), // row 2 to insert array('abc', 'def', 'ghi') // row 3 to insert // and so on ... );
$args = array_fill(0, count($rows[0]), '?');
$query = "INSERT INTO Table (col1, col2, col3) VALUES (".implode(',', $args).")"; $stmt = $pdo->prepare($query);
foreach ($rows as $row) { $stmt->execute($row); }来源:stack overflow
您可以从此处下载转换器工具:
https://github.com/philip/MySQLConverterTool
它生成的代码非常繁琐,主要是因为它使用$GLOBAL变量来实现默认数据库链接参数的方式。(这也使得在有人使用通过转换器的代码时易于识别。)
这里还有一个MySQL Shim库:
https://github.com/dshafik/php7-mysql-shim来源:stack overflow