PHP selecting LONG datatype returns erroneous data
I have a simple PHP script that queries an 8.1.6 database table with a couple of LONG datatype columns. The resulting output has a bunch of NULL characters and at the end of the column and duplicate data from the previous row. This only happens with this database instance. I run a similar query against a 9.2 database with LOB columns and the data returns correctly.
$begin = "2004-01-15";
$end = "2004-01-31";
$begin = strtotime($begin." 00:00:00");
$end = strtotime($end." 23:59:59");
$connection = OCIPLogon($oracleUser, $oraclePasswd, $oracleServer);
$query = "SELECT create_date, longcol1, longcol2 from table where create_date >= ".$begin." and create_date <= ".$end." order by create_date ";
$stmt = OCIParse($connection, $query);
OCIExecute($stmt, OCI_DEFAULT);
while (OCIFetch($stmt, OCI_ASSOC+OCI_RETURN_LOBS)) {
$ncols = OCINumCols($stmt);
for ( $i = 1; $i <= $ncols; $i++ ) {
$result = ociresult($stmt, $i);
if (is_object($result)) { echo "LOADING\n"; $result = $result->load(); }
echo ocicolumnname($stmt, $i)." (".ocicolumntype($stmt, $i).") => ".trim($result)."\n";
echo "\n";
output is:
CREATE_DATE (NUMBER) => 1074186503
LONGCOL1 (LONG) => This is my first row/column with a long statement in it. 1234567890 bla bla bla bla bla bla bla bla ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
LONGCOL2 (LONG) => This is my first row second column with a long statement in it. 1234567890 bla bla bla bla bla bla bla bla ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
CREATE_DATE (NUMBER) => 1074184298
LONGCOL1 (LONG) => This is my second row first column with a long statement in it. 567890 bla bla bla bla bla bla bla bla ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
LONGCOL2 (LONG) => This is my second row second column with a long statement in it. 4567890 bla bla bla bla bla bla bla bla ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
The actual data in the two rows is:
First record:
CREATE_DATE => 1074186503
LONGCOL1 => This is my first row/column with a long statement in it. 1234567890 bla bla bla bla bla bla bla bla
LONGCOL2 => This is my first row second column with a long statement in it. 1234567890 bla bla bla bla bla bla bla bla
Second record:
CREATE_DATE => 1074184298
LONGCOL1 => This is my second row first column with a long statement in it.
LONGCOL2 => This is my second row second column with a long statement in it.
I am running PHP 4.3.6 on Linux. The database is Oracle 8.1.6.3.0.
Any idea what is causing this?
Get the latest version of oci8 and re-try. It has been extensively changed since your version. Try pulling the latest PHP from http://snaps.php.net
Try only querying one LONG at a time (just to test whether it works). I recall LONGS needing special treatment in C code.
When was the to_lob() function introduced in Oracle?:
http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14200/functions185.htm#SQLRF06134
Maybe you can convert to a LOB?
-- cj
Similar Messages
-
Select statement not returning correct data
I'm working on an application and I'm having a weird problem. The application connects to an Oracle database, pulls out some data, and does something with it. In the process of testing I've already read and dealt with some rows. On those rows the UPDATE_FLAG field was changed to a N so they wouldn't be selected again.
I do want to select those rows again, so with SQLPlus I changed the UPDATE_FLAG back to Y. Now here's the strange part. The same select statement run from SQLPlus is returning thoe row I modified, but my application does not.
Here's the select statement:
SELECT * FROM MY_TABLE WHERE UPDATE_FLAG = 'Y' and USER_ID like 'B%';
When I run this I get a row back called Brian.
In my application I do this:
try
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@server:port:sid", "username", "password");
Statement st = conn.createStatement();
ResultSet rec = st.executeQuery("SELECT * FROM MY_TABLE WHERE UPDATE_FLAG = 'Y' and USER_ID like 'B%'");
System.out.println("SELECT * FROM MY_TABLE WHERE UPDATE_FLAG = 'Y' and USER_ID like 'B%'");
while(rec.next())
System.out.println(rec.getString("USER_ID"));
st.close();
} catch (Exception e)
System.out.println("Error -- " + e.toString());
e.printStackTrace();
}When this runs it doesn't return Brian and there are no exceptions caught. It's like it does not find it.
Assuming I explained this well enough, anyone have any ideas what the problem could be?
Thanks,
JamesI do want to select those rows again, so with SQLPlus I changed the UPDATE_FLAG back to Y. Last time I ran SQLPlus I explicitly had to do a commit after modifications, because it was creating a transaction around the sqlplus session. Of course running a query in that session would work on the modified data rather than the actual data.
-
Form/php not returning certain data
So I just recently designed/launched a website (Dreamweaver CS 5.5) that utilizes a form for feedback from visitors. The form/corresponding php script seems to be functioning, as I have tested it numerous times. The only problem is that ONE of the entry forms doesn't seem to be returning any data.
The HTML for the form is as follows:
<form id="form1" name="form1" method="post" action="send.php">
<table width="510" border="0">
<tr>
<td colspan="2"><p>Questions? Comments? Criticism?</p>
<p>Let the Artist know by filling out this handy form:</p></td>
</tr>
<tr>
<td width="72">Name:*</td>
<td width="428" class="returntext"><span id="sprytextfield1">
<label for="name"></label>
<input type="text" name="name" id="name" />
<span class="textfieldRequiredMsg">A value is required.</span><span class="textfieldMinCharsMsg">Minimum number of characters not met.</span><span class="textfieldMaxCharsMsg">Exceeded maximum number of characters.</span></span></td>
</tr>
<tr>
<td>E-Mail:*</td>
<td class="returntext"><span id="sprytextfield2">
<label for="email"></label>
<input type="text" name="email" id="email" />
<span class="textfieldRequiredMsg">A value is required.</span><span class="textfieldInvalidFormatMsg">Invalid format.</span><span class="textfieldMinCharsMsg">Minimum number of characters not met.</span><span class="textfieldMaxCharsMsg">Exceeded maximum number of characters.</span></span></td>
</tr>
<tr>
<td>Subject:</td>
<td class="returntext"><label for="textfield"></label>
<span id="sprytextfield3">
<label for="subject"></label>
<input type="text" name="subject" id="subject" />
<span class="textfieldMinCharsMsg">Minimum number of characters not met.</span><span class="textfieldMaxCharsMsg">Exceeded maximum number of characters.</span></span></td>
</tr>
<tr>
<td>Comment:*</td>
<td><span id="sprytextarea1">
<label for="comment"></label>
<textarea name="comment" id="comment" cols="45" rows="5"></textarea>
<span class="textareaRequiredMsg">A value is required.</span></span></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="button" id="button" value="Submit" />
<input type="reset" name="button2" id="button2" value="Reset" /></td>
</tr>
<tr>
<td> </td>
<td>Fields marked "*" are required.</td>
</tr>
</table>
</form>
And the PHP script is:
<?php
$to = "[email address removed by moderator]";
$subject = $_REQUEST['subject'];
$name = $_REQUEST ['name'];
$name = $_REQUEST['name'] ;
$email = $_REQUEST['email'] ;
$comment = $_REQUEST['comment'] ;
$totalmessage = "
Name: $name \n
Email: $email \n
Subject: $subject \n
Comment: $comment \n ";
if (mail($to, $subject, $totalmessage)) {
echo("<p>Message successfully sent!</p>");
} else {
echo("<p>Message delivery failed...</p>");
?>
When I test the page through my browser (firefox 24.0), I receive the e-mail as it should be, except that the "comment" section is always empty, no matter what I enter. I have checked and double checked and triple checked, and the associated text field is names "comment", and its entry in the script is ['comment']. I have tried replacing the sprytextarea with a regular, non-spry text area, and that didn't make a difference either. The only difference between this field and the other fields (all of which are returning exactly what they should) is that it's a textarea rather than a text field...but if that is the case, I have no idea how to fix it.
Any help on the matter would be much appreciated.According to the official specification for plain text email messages (http://tools.ietf.org/html/rfc2822#section-2.3), a newline character must not appear independently in the body. It should always be preceded by a carriage return.
Your code looks like this:
$totalmessage = "
Name: $name \n
Email: $email \n
Subject: $subject \n
Comment: $comment \n ";
Change it to this:
$totalmessage = "
Name: $name \r\n
Email: $email \r\n
Subject: $subject \r\n
Comment: $comment";
The specification also says that lines in the body must be no longer than 998 characters. Because you have no idea how long the content in the text area will be, it's a good idea to pass the body of the email to the wordwrap function like this before sending the mail:
$totalmessage = wordwrap($totalmessage, "\r\n");
I also agree with bregent that you should be using $_POST instead of $_REQUEST. -
Oracle Personal Edition, data corruption in Long datatype column
Oracle Personal Edition, data corruption in Long datatype column
DATA Corruption in Oracle 8i Personal edition
I am using a Long data type column to store a big text. In oracle Enterprise edition the data stored correctly. But in the Oracle Personal Edition, the Long data type column data corrupted. Some letters in the text are replaced by special character chr(0).
The following data has been taken from a column (Which is of data type LONG).
1. In the first one column name Template_ID stored correctly but in the second one T is missing. Some special characters has stored in that place. (Difference is in 6th Line)
CREATED_DATE####09-21-2001 16:02:00$$LANGUAGE_ID####99$$LOWER_LIMIT####$$MEASURE
ID####810200082001000004$$MODIFIEDDATE####09-21-2001 16:02:00$$SERVICE_RECEIVED####I$$SERVICE_RECORD####PO:F$$STEP_CODE####8$$STEP_RESULT####Failed$$STEP_ROW_
ID####2$$TEMPLATE_ID####M116XX$$TEXT####$$UNIQUE_ID####810200082001$$UPPER_LIMIT
CREATED_DATE####09-21-2001 16:02:00$$LANGUAGE_ID####99$$LOWER_LIMIT####$$MEASURE
ID####810200082001000004$$MODIFIEDDATE####09-21-2001 16:02:00$$SERVICE_RECEIVED####I$$SERVICE_RECORD####PO:F$$STEP_CODE####8$$STEP_RESULT####Failed$$STEP_ROW_
ID####2$$TEMPLA E_ID####M116XX$$TEXT####$$UNIQUE_ID####810200082001$$UPPER_LIMIT
2. In the first one column name Template_ID stored correctly but in the second one E is missing. Some special characters has stored in that place. (Difference is in 6th Line)
CREATED_DATE####09-21-2001 16:01:19$$LANGUAGE_ID####99$$LOWER_LIMIT####$$MEASURE
ID####810200082001000002$$MODIFIEDDATE####09-21-2001 16:01:19$$SERVICE_RECEIVED####U$$SERVICE_RECORD####P:F$$STEP_CODE####7$$STEP_RESULT####Failed$$STEP_ROW_I
D####2$$TEMPLATE_ID####78580A$$TEXT####$$UNIQUE_ID####810200082001$$UPPER_LIMIT#
CREATED_DATE####09-21-2001 16:01:19$$LANGUAGE_ID####99$$LOWER_LIMIT####$$MEASURE
ID####810200082001000002$$MODIFIEDDATE####09-21-2001 16:01:19$$SERVICE_RECEIVED####U$$SERVICE_RECORD####P:F$$STEP_CODE####7$$STEP_RESULT####Failed$$STEP_ROW_I
D####2$$TEMPLAT ID####78580A$$TEXT####$$UNIQUEID####810200082001$$UPPER_LIMIT#See if this helps you any:
Re: Google Maps -
Select Long Raw data type is so slow?
Hi
I have a table having Long Raw data type field.It's store
more than 2mb per record.But,I need to select others fields in this table without selecting Long Raw field.
anyway,it's so slow for me. Any advise to me?
thx a lot. :)I do not understand what you mean because if you have this table ( Example ):
c1 number
c2 number
c3 long
you can do this: select c1, c2 from <table_name>;
Joel Pérez -
Copying data contianing long datatype from one schema to another
I'm using Oracle 8.1.7 and trying to move copy data from one schema to another.
Usually an easy task. This time the data contains longs so I can't use standard SQL. The data in the long is too long for a PL/SQL long datatype so that's not worked.
I've tried the COPY FROM command but get the invalid sql command error.
Can anyone save my hair?The COPY command doesn't have to be all on one line. The continuation character for SQL*Plus commands is a hyphen.
SQL> prompt "Hello"
"Hello"
SQL> prompt -
"Hello""Hello"
SQL>Metalink is the website for customers that pay for Oracle support. Go to www.oracle.com and click on the metalink button on the top left of the screen. It's called Metalink because Oracle support levels are named after metals: bronze, silver, gold. -
In what order will select * return the data?
hi guys,
1) if we just do a select * from emp, will it return the data in the order of the data blocks in the extents. i.e. return all data blocks from extent 1, then from extent 2 and so forth?
2) if we do a select * from emp, and say half the data blocks are already in the database buffer cache, how does Oracle know that the data blocks from emp are already in the database buffer cache? Does it keep some lookup table?
thanksOracleGuy777 wrote:
thanks guys,
I will mark the question as closed, even though I am still a bit unsure as to why if we just start up a database so that the db cache is empty, and do a select * on a small table that is all on one disk, why the Oracle kernel would from a logical point of view choose different order to return the rows.
but thanks anywayThe order in which rows are returned is a side effect of the execution plan chosen by the Query Optimizer (which is one reason why the ORDER BY clause exists), in plain relational theory both your underlying table and the results are relations (simply an unordered set of tuples) so consequently the optimizer is free to follow whatever method it likes to return the results. In the case of a Rule Based optimizer then there is simply a set of rules that determine the choice of execution plan, in the case of a cost based optimizer then the optimizer attempts to minimize the time taken to return the resultset by choosing an execution plan based on statistical information and algorithms. The existence of the buffer cache is in fact ignored for most practical purposes and certainly for the purposes you imagined.
Now if your table is just that, a straight forward heap table with no indexes then you will likely get what you expect, that is rows returned in the order that the blocks in which they are held are located on disk; this isn't insert order necessarily by the way especially if ASSM is involved. This is only however because a full tablescan is the only available option for satisfying the query. Most tables however aren't like that, they have indexes, the query involves joins and filters and so on. Once you start allowing the possibility of other access paths then you allow the possibilty that rows or rather blocks will be visited in a different order to the simplistic one described above.
Niall Litchfield -
I have created a select statement and saved it to the variable sql_str. I then Open the cursor "OPEN v_cursor FOR sql_str;".
One of the columns in the select statement has a datatype of LONG. I fetch the column into a variable that I have declared as Long. I get the following error: ORA-00997: illegal use of LONG datatype.
What am I doing wrong?One of the columns in the select statement has a datatype of LONG. I fetch the column into a variable that I have declared > as Long. I get the following error: ORA-00997: illegal use of LONG datatype.
What am I doing wrong?What are you doing differently:
SQL> desc user_views
VIEW user_views
Name Null? Type
VIEW_NAME NOT NULL VARCHAR2(30)
TEXT_LENGTH NUMBER(0)
TEXT LONG <-- Long
TYPE_TEXT_LENGTH NUMBER(0)
TYPE_TEXT VARCHAR2(4000)
OID_TEXT_LENGTH NUMBER(0)
OID_TEXT VARCHAR2(4000)
VIEW_TYPE_OWNER VARCHAR2(30)
VIEW_TYPE VARCHAR2(30)
SUPERVIEW_NAME VARCHAR2(30)
EDITIONING_VIEW VARCHAR2(1)
READ_ONLY VARCHAR2(1)
SQL> declare
t long;
begin
for c in (select text from user_views where rownum = 1)
loop
t := c.text;
dbms_output.put_line (t);
end loop;
end;
SELECT
"LIB_DYN_QUERY_ID" AS "LIB_DYN_QUERY_ID"
,"LIB_DYN_QUERY_NAME" AS "LIB_DYN_QUERY_NAME"
,"LIB_DYN_QUERY" AS "LIB_DYN_QUERY"
,"CREATED_ON" AS "CREATED_ON"
,"CREATED_BY" AS "CREATED_BY"
FROM
"UT_LIB_DYN_QUERIES"
WITH READ ONLY
PL/SQL procedure successfully completed.? -
How to get length of data on column with long datatype
How to get length of data on column with long datatype without using pl/sql block
...another reason not to use LONG datatype for columns.
Oracle advises to switch to LOB columns instead
SQL> create table t
2 (x long)
3 /
Table created.
SQL> insert into t values (rpad ('x', 10000, 'x'))
2 /
1 row created.
SQL> alter table t
2 modify x clob
3 /
Table altered.
SQL> desc t
Name Null? Type
X CLOB -
Selecting From Column with Long Datatypes
create table temp
a long
insert into temp values ('abc');
commit;
select * from temp
where a = 'abc'
I am getting the following error while am tring to select a = 'abc';
ora-00997 : illegal use of LONG datatype
How can i select values from a column with long datatypesinsert into temp values ('abc');
cannot (must not) work, when the column is type long (thats a numeric type!!)
-> here you get an ora- 00911 errorcode
that the select doesn't work then should be clear.
mfg f.humer -
Return all data without selecting any value in query filter
Hi,
I created a document with query filters(prompt, LOV). But sometimes users don't want to select any value and just want to return all data in the report.
I can't find a way to achieve this. Does anyone know how to implement this ?
Thanks.Hi,
you can modify the "select" statement for your LOV and add an additionaly keyword like "ALL" in your list of values. Then you can modify your where-clause to handle the "ALL" keyword.
E.g. (<your condition>=@prompt(....) or 'ALL'=@prompt(......) )
Regards,
Stratos -
Illegal use of LONG datatype error message when i create materialized view
Hello to all
I want create read only materialized view replication environment two of our tables have LONG datatype when i create materialized view against on them
I recieve this error message
CREATE MATERIALIZED VIEW MDB.TOAD_PLAN_TABLE TABLESPACE aramis REFRESH FORCE WITH ROWID AS SELECT * FROM MDB.TOAD_PLAN_TABLE@arahisto
Error report:
SQL Error: ORA-00997: illegal use of LONG datatype
00997. 00000 - "illegal use of LONG datatype"
Do you know any resort solution for it?
thanksYou can not use longs in materialized views over a database link, you can however take a part of a long over to a materialized view.
I have gotten this to work in the past l had to create a PL/SQL function that you can use to extract the character data from the long column and use that to
as part of the function you will need to pass in the columns of the table that will identify the unique records so you can pick out the long column
example function
-- you will need to make sure this funtion is in the remote location as you can not select longs accross a DB LINK.
CREATE OR REPLACE FUNCTION MDB.TOAD_PLAN_LONG_CONV
(pass in the primary key columns for the table)
RETURN VARCHAR2
IS
v_long VARCHAR2(32767) ;
BEGIN
BEGIN
-- need to select the long column into the PL/SQL variable
SELECT long_column
INTO v_long
FROM MDB.TOAD_PLAN_TABLE
WHERE key_columns = passed columns ;
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = '-01406' THEN
NULL ;
ELSE
RAISE ;
END IF ;
END ;
RETURN SUBSTR(v_long,1,4000) ;
END ;
Then when you create the materialized view utilize that function on the long column.
create or replace materialized view MDB.TOAD_PLAN_TABLE TABLESPACE aramis REFRESH FORCE WITH ROWID
AS
SELECT column1, .... columnx,
MDB.TOAD_PLAN_LONG_CONV@arahisto (primary key column list) as long_column_name
FROM MDB.TOAD_PLAN_TABLE@arahisto ;
See if this will work for you? Keep in mind however this solution will not get the entire long column only as much as a PL/SQL variable will hold of it.
Mike -
Using Decode with "Long" datatypes
Hi,
I want to use a select statement in a view which uses a decode function involving a "long" datatype. But doing some raises an error "Invalid datatypes". Is there a way around?
Anupam.I'm a bit puzzled as to what it is you are trying to achieve (it has been an afternoon for vague requirements). Normally the sort of data that we would want to store in a LONG is ,er, long and therefore not susceptible to use in a DECODE. But it does not matter, because we can only manipulate LONGs in PL/SQL and that does not parse DECODE statements. We will have to use IF...ELSE constructs instead.
CREATE OR REPLACE FUNCTION l2v (pl in rowid) RETURN VARCHAR2
AS
ll LONG;
rv VARCHAR2(20);
BEGIN
SELECT col1
INTO ll
FROM T_LONG
WHERE rowid = pl;
IF ll LIKE '%text%'
THEN
rv := 'yes!';
ELSE
rv := 'noooo';
END IF;
RETURN rv;
END;
SQL> select l2v(rowid) from t_long;
L2V(ROWID)
yes!
yes!
SQL> You can use this function in a query. Note that it is doing a SELECT in its own right so this will not be a very performant solution if you build the view on a big table.
Cheers, APC -
Select LONG column from Remote table
Hi to all.
I have the following problem: I can't select a LONG column from remote database, when there are Join operation in the query. Example:
SELECT long_column FROM remote_table@DB
-> that's OK, but:
SELECT long_column FROM remote_table@DB INNER JOIN remote_table2@DB ON ...
-> returns: "ORA-00997: Illegal use of LONG datatype"
I cannot even perform (because there a LONG column in the joined table):
SELECT nonlong_column FROM remote_table@DB INNER JOIN remote_table2@DB ON ...
That's very strange to me because:
SELECT long_column FROM local_table INNER JOIN local_table2 ON ...
-> is OK!
Can someone help me to SELECT a long column from remote in SELECT query with JOIN clause!
Thanks a lot!Hi
"Distributed queries are currently subject to the restriction that all tables locked by a FOR UPDATE clause and all tables with LONG columns selected by the query must be located on the same database. " by otn docs.
I have no idea.
Ott Karesz
http://www.trendo-kft.hu -
Best approach to return Large data ( 4K) from Stored Proc
We have a stored proc (Oracle 8i) that:
1) receives some parameters.
2)performs computations which create a large block of data
3) return this data to caller.
compatible with both ASP (using MSDAORA.Oracle), and ColdFusion (using Oracle ODBC driver). This procedure is critical in terms of performance.
I have written this procedure as having an OUT param which is a REF CURSOR to a record containing a LONG. In order to make this work, at the end of the procedure I have to store the working buffer (an internal LONG variable) into a temp table, and then open the cursor as a SELECT from the temp table.
I have tried to open the cursor as a SELECT of the working buffer (from dual) but I get the error "ORA-01460: unimplemented or unreasonable conversion requested"
I suspect this is taking too much time; any tips about the best approach here? is there a resource with REAL examples on returning large data?
If I switch to CLOB, will it speed the process, be compatible with callers, etc ? all references to CLOB I saw use trivial examples.
Thanks for any help,
Yoram AyalonWe have a stored proc (Oracle 8i) that:
1) receives some parameters.
2)performs computations which create a large block of data
3) return this data to caller.
compatible with both ASP (using MSDAORA.Oracle), and ColdFusion (using Oracle ODBC driver). This procedure is critical in terms of performance.
I have written this procedure as having an OUT param which is a REF CURSOR to a record containing a LONG. In order to make this work, at the end of the procedure I have to store the working buffer (an internal LONG variable) into a temp table, and then open the cursor as a SELECT from the temp table.
I have tried to open the cursor as a SELECT of the working buffer (from dual) but I get the error "ORA-01460: unimplemented or unreasonable conversion requested"
I suspect this is taking too much time; any tips about the best approach here? is there a resource with REAL examples on returning large data?
If I switch to CLOB, will it speed the process, be compatible with callers, etc ? all references to CLOB I saw use trivial examples.
Thanks for any help,
Yoram Ayalon
Maybe you are looking for
-
Hello Experts, Scenario: we plan finished goods in SNP & for component level we run MRP in ECC. I need to understand how MRP does planning in ECC based on SNP Planned order. Why MRP run does detailed scheduling on Finished goods planned order which r
-
R.I.P. Airport Express???
Hi All, If after one year and one week of flawless operation (just outside warranty), my Airport Express stops producing any wireless signal, that probably means it's time for me to replace it! My internet connection started to slow down and an hour
-
Authentication to agent workstation failed when trying to run a test in Oracle Test Manager
I have the complete version of OATS installed on my local machine. I have the OracleATSHelper, OracleATSServer and OracleATSAgent services running. In OTM when I go to run an openscript test I select the system, type the version number and hit run an
-
HT1430 my i pad is disabled? How do I unlock it?
My I Pad is disabled. How do I unlock it?
-
How can I tell when a text message is received and opened
how can I tell when a txt message has been received and opened ?