簡體   English   中英

遷移到Postgresql

[英]Migrate to Postgresql

我已經嘗試了好幾天,但無法解決我的問題。 我聲明我開始在Mysql上創建自己的網頁,並且效果很好。 我不得不遷移到Postgres,問題就從這里開始。

例如:

我有這個錯誤:

致命錯誤:未捕獲錯誤:對C:\\ xampp \\ input.php:39中的字符串調用成員函數query()堆棧跟蹤:#0 {main}

$checkdata = "SELECT count(*) as prenotato
  FROM Prenotazione
 WHERE data='$data'
   AND NOT ('$newTimeEnd' < orario_inizio OR orario_fine < '$orario_inizio')";

$prenotato = $conn_string->query($checkdata)->pg_fetch_row()[0];

這是我使用的config.php文件:

<?php

$conn_string = "host=localhost port=5432 dbname=postgres user=postgres password=123456789";
$dbconn = pg_connect($conn_string);

?>

編輯。

我遵循您的建議:

config.php文件

<?php 
$dbname = "postgres";
$host = "localhost";
$username = "postgres";
$dbh = new PDO("pgsql:dbname=$dbname;host=$host", $username, 123456789 ); 
?> 

例如,我對類似的錯誤有另一個問題:

警告:pg_query()期望參數1為資源,第5行的C:\\ xampp \\ htdocs \\ PhpProject1 \\ select.php中給出的對象

警告:pg_num_rows()期望參數1為資源,第18行的C:\\ xampp \\ htdocs \\ PhpProject1 \\ select.php中給出的null

<?php  
 require ('config.php');
 $output = '';  
 $sql = "SELECT * FROM Prenotazione where data = CURRENT_DATE()"; 
 $result = pg_query($dbh, $sql);  
 $output .= '  
      <div class="table-responsive">  
           <table class="table table-bordered">  
                <tr>  

                     <th width="10%">Nominativo</th>  
                     <th width="20%">Data</th> 
                     <th width="5%">Orario Inizio</th>
                     <th width="5%">Orario Fine</th>
                     <th width="5%">Email</th>
                     <th width="50%">Oggetto</th>
                </tr>';  
 $rows = pg_num_rows($result);
 if($rows > 0)  
 {  

我怎么解決這個問題?? 謝謝

$conn_string是一個字符串,不是對象,因此您不能在其上調用任何方法! 甚至變量名也告訴您!

您確定不是要使用該字符串創建新的PDO連接嗎?

您的字符串應類似於以下示例:

$postgresDsn = 'pgsql:host=localhost;port=5432;dbname=testdb;user=someone;password=mypass'

$db = new PDO($postgresDsn, $user, $password);

在此處檢查PDO的文檔:

http://php.net/manual/en/pdo.construct.php

另外,有關postgres的具體說明:

https://secure.php.net/manual/en/ref.pdo-pgsql.connection.php

UPDATE

我剛剛注意到,您沒有使用$dbconn 嘗試更改:

$prenotato = $conn_string->query($checkdata)->pg_fetch_row()[0];

$prenotato = $dbconn->query($checkdata)->pg_fetch_row()[0];

無論如何,請檢查PDO,它更安全,並且更易於使用。

由於您的第一個問題已得到回答,並且您切換到PDO,因此我將回答您的后續問題。

由於您現在正在使用PDO,因此無法使用pg_*方法。 您現在需要使用PDO方法。 有關如何使用它們的更多信息,請參見PDO :: query文檔。

這應該與您的查詢一起使用:

$rows = $dbh->query($sql);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM