无法创建表
我最近做了一个postgresql数据库,但由于某种原因,我无法在其中创建表。我很好,我是否可以从php脚本或终端创建它;但我搜索了很多地方,找不到任何有用的东西。我在mysql中完成了一些工作,但是postgresql恰好给我带来了问题。无法创建表
我知道我的PHP文件我正确连接到我的数据库,我已经跑这个脚本一样(在pg_connect之后插入)的众多版本:
$tsk1 = pg_query("
CREATE TABLE IF NOT EXISTS `elb` (
`id` int(8) NOT NULL AUTO_INCREMENT,
`user` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
`pass` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
`name` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`_id`),
UNIQUE KEY `_user` (`_user`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3");
,我也试过
$tsk1 = pg_query("
CREATE TABLE IF NOT EXISTS 'elb' (
'id' int(8),
'user' varchar(128),
'pass' varchar(128),
'name' varchar(128),
");
我也试过这个,但得到了500错误。而且我知道我已连接,因为我尝试更改密码中的一个字符,并返回'无法连接'。
<?php
$dbconn = pg_connect("host=hostname port=portnum dbname=mydb user=myuser password=mypass sslmode=require options='--client_encoding=UTF8'") or die('Could not connect: ' . pg_last_error());
$sql = pg_query('CREATE TABLE "elb" (
"id" int(8),
"user" varchar(128),
"pass" varchar(128),
"name" varchar(128)
)');
?>
int(8)
没有意义PostgreSQL中,其中int
是一个32位整数(又名int4
)和bigint
是一个64位整数(又名int8
)。
如果您收集并报告了实际的数据库错误消息(应该在数据库日志文件中),而不是简单地说出“500错误”,这对您来说将更容易诊断。
MySQL可能是唯一使用反引号(`
)作为名称分隔符的DBMS。因此,如果您确定要连接到PostgreSQL数据库,则需要删除脚本中的所有反引号。
诸如ENGINE=...
,DEFAULT CHARSET=...
之类的事情以及CREATE TABLE语句之后的其他选项也很可能是MySQL特有的,应该删除。
如果您需要在查询中分隔的名字,用双引号("
):
CREATE TABLE IF NOT EXISTS "elb" (
"id" int(8),
"user" varchar(128),
...
这是我尝试运行的第一件事的另一个版本,但由于某种原因;这给了我一个“HTTP错误500(内部服务器错误)”,即使我知道代码看起来是正确的,并与MySQL一起工作。我只是不知道为什么我的postgresql数据库不接受它...是否有一些特殊的条件必须有?在我刚刚构建网站之前,我没有与heroku php-apps一起工作过。 –
现在我的整个PHP文件都在上面(我编辑了它),但我只是没有看到错误(我试过和没有最后一个逗号) –
@DevonBernard:对不起,我认为问题只在SQL ,所以我认为你会知道如何处理嵌套引号。无论如何,我认为你至少有两个选择:1)使用单引号分隔PHP字符串,这样你就可以在*字符串中使用双引号*而没有问题; 2)在PHP字符串周围使用双引号,如果这是首选样式,但是在字符串中使用双引号''''我不太熟悉PHP,所以这里有一个链接,可以更好地解释这些东西:http://www.nusphere.com/php/data_structures_php_strings1.htm。 –
您遇到的元问题是您没有阅读从PostgreSQL服务器返回的错误消息。如果您没有先解决问题,那么使用PHP/PG进行编程时无法高效工作。
你的PHP环境可能有display_errors
设置为Off。这是生产的推荐值。从php.ini中:
; This directive controls whether or not and where PHP will output errors, ; notices and warnings too. Error output is very useful during development, but ; it could be very dangerous in production environments. Depending on the code ; which is triggering the error, sensitive information could potentially leak ; out of your application such as database usernames and passwords or worse. ; It's recommended that errors be logged on production servers rather than ; having the errors sent to STDOUT. ; Possible Values: ; Off = Do not display any errors ; stderr = Display errors to STDERR (affects only CGI/CLI binaries!) ; On or stdout = Display errors to STDOUT ; Default Value: On ; Development Value: On ; Production Value: Off ; http://php.net/display-errors display_errors = Off
假如你不能改变的不是服务器管理员,你应该能够动态地将它设置为论,而你深化发展,通过在你的脚本的开头添加:
ini_set('display_errors', 'On');
之后,PG错误应该在页面出现时自动显示。
如果写生产高质量的代码,你要检查每个pg_query
调用的结果,而当FALSE
使用pg_last_error函数来得到错误信息,并将其输出的日志或页面根据上下文。
我尝试在我的数据库中添加一个表;但由于某种原因,当我运行脚本时,它会成功运行,但表格仍然没有生成。 –
这是pg版本9.2。1 –
为什么你需要使用引号?你所有的表格和列名都是理智的,不需要它们。 – Kuberchaun