Как избежать одиночной цитаты

Я использую функцию 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++; }