Я использую функцию pg_query_params
для добавления значений в таблицу vmobjects
на моей странице addvm.php
.
$query = "INSERT INTO vmobjects(guid, ipaddress, username, password, hostid, vmname, guestostype) VALUES($1, $2, $3, $4, $5, $6, $7)"; $result = pg_query_params($conn, $query, array($guid, $ip, $username, $password, $hostid, $name, strtolower($os)));
Теперь я использую pg_fetch_array
для извлечения строки в массиве.
Я использую этот запрос:
$query = "select vmname, guid, hostid, guestosname from vmobjects"; AddLog("infrastructure.php", "Query: ".$query, ERR_DEBUG_LOW); $result = pg_query($conn, $query); $no_records = pg_num_rows($result); $j = $no_records; $i = 0; while($row = pg_fetch_array($result)) { if($row[3] == "") { $vmobj_Array[$i] = $row[0] . '***' . $row[1] . '***' . $row[2]; } else { $vmobj_Array[$i] = $row[0] . ' ( ' . $row[3] . ' )' . '***' . $row[1] . '***' . $row[2]; } $i++; }
Но он работает только для простой строки, такой как james, helton, discovere
, а не для j'ames, h'elton, d'iscovere
.
На самом деле я хочу получить строку в обоих форматах.
В соответствии с тем, как кодировать одинарные кавычки , htmlentities($str, ENT_QUOTES);
или htmlspecialchars($str, ENT_QUOTES);
должен сделать трюк, где $ str следует заменить переменной или строкой, которую вы хотите избежать (например, $row[0]
). Если вы просто хотите добавить его, все, что вам нужно сделать, это добавить его: print "Here's an apostrophe '";
Попробуйте использовать это, чтобы получить значения, чтобы получить both
:
while($row = pg_fetch_array($result, null, PGSQL_BOTH)){
Кроме того, ваши запросы разные: в INSERT
вы вставляете guestostype
, но вы выбираете guestosname
в SELECT. Я предполагаю, что ваш запрос просто не возвращает никаких значений, потому что вы запрашиваете строку, которая не существует, но проверьте с помощью psql
что все данные находятся в таблице.
Я написал тестовую программу, которая выглядит более или менее программой, которая выполняет описанную выше функциональность ключа. Кажется, все работает отлично. Можете ли вы объяснить, как ваша программа отличается от этой тестовой программы или предоставляет собственную тестовую программу?
<?php $conn = pg_connect("host=localhost"); $result = pg_exec($conn,"drop table tvmobjects cascade;"); $result = pg_exec($conn,"create table tvmobjects (guid text not null, ipaddress text not null, username text not null, password text, hostid text not null, vmname text not null, guestostype text, guestosname text);"); function add_user($conn,$guid,$ip,$username,$password,$hostid,$name,$os) { $query = "INSERT INTO tvmobjects(guid,ipaddress,username,password,hostid,vmname,guestostype) VALUES($1, $2, $3, $4, $5, $6, $7)"; $result = pg_query_params($conn,$query,array($guid,$ip,$username,$password,$hostid,$name,strtolower($os))); $no_records=pg_num_rows($result); echo "Got $no_records in insert of $username\n"; } add_user($conn,"james","1.2.3.4","james","semaj", "jamesid", "jamesvm", "jamesostype"); add_user($conn,"j'ames","1.2.3.5","j'ames","semaj", "j'amesid", "j'amesvm", "j'amesostype"); $query= "select vmname,guid,hostid,guestosname from tvmobjects"; $result = pg_query($conn,$query); $no_records=pg_num_rows($result); $j=$no_records; $i=0; while($row = pg_fetch_array($result)) { if ($row[3]=="") { echo $row[0].'***'.$row[1].'***'.$row[2]."\n"; } else { echo $row[0].' ( '.$row[3].' )'.'***'.$row[1].'***'.$row[2]."\n"; } $i++; } ?>
Выполнение этого для меня генерирует:
Got 0 in insert of james Got 0 in insert of j'ames jamesvm***james***jamesid j'amesvm***j'ames***j'amesid
Как уже указывалось ранее, вы не вставляете гостевое имя при вставке записи, так что на приведенном здесь выходе нет аннотации (guestosname). Но вставка и выбор, похоже, работают как чемпион, поэтому непонятно, что не так.
Использовать это:
while($row = pg_fetch_array($result)) { if($row[3] == "") { $vmobj_Array[$i] = htmlentities($row[0], ENT_QUOTES) . "***" . $row[1] . "***" . $row[2]; } else { $vmobj_Array[$i] = htmlentities($row[0], ENT_QUOTES) . "***" . $row[1] . "***" . $row[2]; } $i++; }